Могу ли я подключить образ Docker как том в Docker? - PullRequest
0 голосов
/ 19 мая 2018

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

Я знаю, что есть плагины тома, которые я мог бы использовать, но я не смог найти ни одного, где бы я ни находилсяможет к этому или к чему-то похожему?

Ответы [ 3 ]

0 голосов
/ 20 мая 2018

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

Для этого добавьте два следующих тома:

- "/var/run/docker.sock:/var/run/docker.sock"
- "/usr/bin/docker:/usr/bin/docker"

Если вам нужно совместно использовать файлы между контейнерами, сопоставьте том /tmp:/tmp при запуске обоих контейнеров.

0 голосов
/ 21 мая 2018

Возможно создать любой каталог образа в том докера, но не полное изображение .По крайней мере, не очень простым и понятным способом.

Если вы хотите создать каталог из своего образа в качестве тома докера, вы можете создать именованный том:

docker volume create your_volume
docker run -d \
  -it \
  --name=yourcontainer \
  -v your_volume:/dir_with_data_you_need \
  your_docker_image

С этого моментавы получите доступ к your_volume с данными из образа your_docker_image

Причина, по которой вы не можете смонтировать весь образ в томе, заключается в том, что докер не позволяет указать / в качестве источника именованного тома.Вы получите Cannot create container for service your-srv: invalid volume spec "/": invalid volume specification: '/', даже если попытаетесь с помощью docker-compose.

0 голосов
/ 20 мая 2018

Не знаю прямого пути.

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

docker run -d -v /any_of_your_host_folder:/your_assets_folder_in_your_image_container your_image
docker run -d -v /any_of_your_host_folder:/your_folder_of_your_new_container your_container_want_to_use_assets

Для your_image вам нужно добавить CMD в dockerfile, чтобы скопировать ресурсы в your_assets_folder_in_your_image_container (тот, который вы используете в качестве тома, когда CMD выполняется после тома)

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

Вы просто хотите, чтобы другие люди легко использовали ресурсы, так почему бы не предоставить им скрипт, автоматически получить изображение -> запустить контейнер (CMD auto copy files to volume) ->удалите изображение / контейнер -> активы, уже находящиеся на хосте, поэтому люди просто используют активы хоста в качестве тома для следующих действий.

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

...