docker и -v: как понять, монтиируется с хоста в контейнер или наоборот?

Я долго мучался с докером, и понял, что даже после прочтения документации и ответов на частые вопросы не понимаю вот чего.

Вот пример команды:

docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx

Про эту команду пишут, что она возьмет логи энджинкса и смонтирует их мне в ~/nginxlogs.

Но здесь же нигде не указывается "направление монтирования". С тем же успехом я могу ожидать, что команда возьмёт мою директорию ~/nginxlogs и засунет её в контейнер.

Есть ещё команда --mount, которая тоже позволяет указать source, destination — но никак не "направление монтирования"

Не могли бы Вы объяснить мне этот момент? То есть, как надо монтировать фолдеры "с хоста в контейнер" и "из контейнера на хост" и какими командами (или ключами) для этого правильно пользоваться?


Ответы (1 шт):

Автор решения: Темка тоже

В текущем контексте можно считать, что монтирование командами -v и --mount всегда происходит в направлении из docker-хоста в docker-контейнер. Если же ты хочешь расшарить имеющуюся папку из контейнера в хост, то тут нужны уже совсем другие средства. В твоём случаем команда

  docker run --name=nginx -d -v ~/nginxlogs:/var/log/nginx -p 5000:80 nginx

будет давать доступ контейнеру к хостовой папке ~/nginxlogs, но под видом /var/log/nginx. Конечно, это упрощённое объяснение. Соответственно, если в твоём образе контейнера уже была папка /var/log/nginx с каким-либо непустым содержимым, то контейнер не увидит это содержимое при запуске в такой конфигурации.

Более подробно: На самом деле docker сначала создаёт том (volume), который может быть основан на папке хоста, а уже потом монтирует его к контейнеру (или нескольким контейнерам). Отсюда всегда строгое направление монтирования: из хоста в контейнер. docker run -v можно рассматривать как сокращение, т.е. создание тома + запуск контейнера со смонтированным томом в одной команде.

Если по каким-либо причинам необходимо смонтировать уже имеющиеся файлы/папки из контейнера в хост-систему, что по моему мнению немного извращение, то тут надо использовать уже другие средства, которые на сам docker никак не завязаны. К примеру, монтирование удалённых(сетевых) папок в linux. Возможно есть какие-то плагины docker'а, которые облегчат данную работу, но я тут сказать ничего не могу.

→ Ссылка