Поиск по сайту:

Как смонтировать или создать символическую ссылку на один файл в контейнере Docker


Том Docker и монтирование привязки используются для привязки каталогов в ОС хоста к местоположениям в файловой системе контейнера. Хотя они обычно используются для монтирования целых каталогов, вы также можете использовать их для символической ссылки на отдельные файлы.

Симлинк на Docker с хоста

Монтирование целых каталогов хорошо работает, если вы перезаписываете целый список конфигурационных файлов, но если вы просто хотите настроить таргетинг на один файл, вам нужно будет использовать монтирование одного файла. Это также полезно, если вы хотите иметь несколько монтирований в один и тот же каталог, но из разных мест. Он работает так же, как обычная символическая ссылка Linux, за исключением того, что он обрабатывается через Docker и пересекает мост между файловой системой хоста и контейнера.

Для обычного подключения тома Docker требуется подключение к целевому каталогу, в котором том будет связан.

docker volume create nginx-config

docker run -d 
--name devtest 
--mount source=nginx-config,target=/etc/nginx 
nginx:latest

Однако при монтировании с привязкой источником может быть каталог или файл на хосте. Монтирование тома не поддерживает это, и хотя вы обычно хотите их использовать, вы должны использовать монтирование привязки более низкого уровня, если хотите монтировать отдельные файлы.

Для этого можно запустить контейнер с флагом --mount type=bind, который поддерживает отдельные файлы, если указать путь:

docker run -it 
--mount type=bind,source=/path/file.cfg,target=/etc/example/file.cfg 
nginx sh

В качестве альтернативы, если вы действительно хотите использовать тома Docker, вы можете создать том только с файлом, который вы планируете монтировать, смонтировать его во временный каталог в контейнере, а затем создать реальную символическую ссылку внутри контейнера (в скрипте сборки Docker ), который будет ссылаться на временный каталог с файлом. В целом это, вероятно, худшее решение, чем монтирование с привязкой, но оно позволяет хранить данные через API тома Docker.