Том монтирования Docker для отражения файлов контейнера на хосте - PullRequest
0 голосов
/ 26 февраля 2019

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

, если я запустил следующее>

docker run -v /host/empty/dir:/container/folder/with/code/files -it myimage

/ host / empty / dir по-прежнему пусто, ипросмотр контейнера dir также показывает его пустым.Я хочу, чтобы содержимое файла / container / folder / with / code / files отображалось в / host / empty / dir

Ответы [ 2 ]

0 голосов
/ 27 февраля 2019

Себастьян Хельберт ответ правильный.Но есть еще способ сделать это в 2 шага.

Сначала запустите контейнер для извлечения файлов:

docker run --rm -it myimage

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

docker cp <container_id>:/container/folder/with/code/files /host/empty/dir

Теперь остановите контейнер.Он будет удален (--rm) при остановке.Теперь, если вы запустите исходную команду, она будет работать как положено.

docker run -v /host/empty/dir:/container/folder/with/code/files -it myimage

Существует другой способ получить доступ к файлам из контейнера, не копируя его, но это очень громоздко.

0 голосов
/ 27 февраля 2019

Ваш /host/empty/dir всегда пуст, поскольку привязка тома заменяет (переопределяет) папку контейнера на вашу пустую папку хоста.Но вы не можете сделать обратное, то есть вы берете папку контейнера, чтобы заменить вашу папку хоста.

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

Например:

  1. запустите образ докера с сопоставлением тома между вашей папкой хоста и временной папкой: docker run -v /host/empty/dir:/some-temp-folder -it myimage
  2. скопируйте содержимое /container/folder/with/code/files в /some-temp-folder, чтобы заполнить папку хоста вашей папкой-контейнером
  3. запустить контейнер с отображением объема на /host/empty/dir, но теперь эта папка больше не пуста: run -v /host/empty/dir:/container/folder/with/code/files -it myimage

Обратите внимание, что шаги 1 и 2 можно заменить на : Копирование файлов из контейнера Docker на хост

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...