2016-02-22 4 views
0

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

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

+1

Разве это не SCC? Во всяком случае, каждый каталог в контейнере где-то живет на хосте. Сделайте докер осмотрите и посмотрите, где .... – user2105103

+0

Что означает SCC? –

+0

Контроль исходного кода. git/cvs и т. д. – user2105103

ответ

0

В вашем Dockerfile вы можете легко ADD or COPY весь каталог.

Я думаю, это то, что вы ищете. В противном случае вы можете просто поделиться кодом и с docker run, чтобы они могли объединить общий код.

+0

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

+0

Я согласен, следовательно, мое последнее предложение: «В противном случае вы можете просто передать код в сторону изображения, а в режиме« docker run »они смогут объединить общий код». Таким образом, код может быть изменен без фиксации. Код не должен быть _in_ на самом деле, это плохая практика (из-за необходимости совершить операцию). – Auzias

2

Чтобы сохранить (сохранить) данные, Docker разработал концепцию томов. в основном Volumes - это каталоги (или файлы), которые находятся за пределами файловой системы Union по умолчанию и существуют как обычные каталоги и файлы в файловой системе хоста.

Вы можете объявить объем во время выполнения с флагом -v:

$ docker run -it --name container1 -v /data debian /bin/bash 

Это позволит сделать каталог /data внутри контейнера живет за пределами Союза файловой системы и непосредственно доступен на хосте. Любые файлы, хранящиеся в каталоге /data, будут скопированы в том. Мы можем узнать, где объем живет на хосте, используя команду проверки докеров на хосте.

Открыть новый терминал и оставить предыдущий контейнер ход и запуск:

$ docker inspect container1 

Выходной сигнал будет представить подробную информацию о контейнерных конфигурациях, включая объемы. Вывод должен выглядеть что-то похожее на следующее:

... 
Mounts": [ 
    { 
     "Name": "fac362...80535", 
     "Source": "//var/lib/docker/vfs/dir/cde167197ccc3e/_data", 
     "Destination": "/data", 
     "Driver": "local", 
     "Mode": "", 
     "RW": true, 
     "Propagation": "" 
    } 
] 
... 

говорит нам, что Docker был установлен /data внутри контейнера как каталог где-то под /var/lib/docker в хозяине.

+0

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

+0

По моему пониманию, тома предназначены для сохранения данных, независимо от жизненного цикла контейнера. Тома данных сохраняются, даже если сам контейнер удален. –

+0

Я удаляю принятый флаг ответа из этого вопроса, потому что решение работает только с Linux. В Windows и OSX док-машина использует VirtualBox, которая не раскрывает каталог, в котором находится тома. Мы вернулись на первый план. Подрядчики не могут получить доступ к объемам в контейнерах. –

Смежные вопросы