[docker] Как установить каталог хоста в контейнер докеров?


Answers

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

1. монтировать локальную систему на boot2docker

sudo mount -t vboxsf hostfolder /boot2dockerfolder

2. Вставьте файл boot2docker в контейнер linux

docker run -v /boot2dockerfolder:/root/containerfolder -i -t  imagename

тогда, когда вы будете внутри контейнера, вы увидите содержимое своей папки-хозяина

Question

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

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

kishore$ cat Dockerfile

FROM ubuntu:trusty
RUN apt-get update
RUN apt-get -y install git curl vim
CMD ["/bin/bash"]
WORKDIR /test_container
VOLUME ["/test_container"]

kishore$ tree
.
├── Dockerfile
└── main_folder
    ├── tfile1.txt
    ├── tfile2.txt
    ├── tfile3.txt
    └── tfile4.txt

1 directory, 5 files kishore$ pwd /Users/kishore/tdock

kishore$ docker build --tag=k3_s3:latest .

Uploading context 7.168 kB
Uploading context
Step 0 : FROM ubuntu:trusty
 ---> 99ec81b80c55
Step 1 : RUN apt-get update
 ---> Using cache
 ---> 1c7282005040
Step 2 : RUN apt-get -y install git curl vim
 ---> Using cache
 ---> aed48634e300
Step 3 : CMD ["/bin/bash"]
 ---> Running in d081b576878d
 ---> 65db8df48595
Step 4 : WORKDIR /test_container
 ---> Running in 5b8d2ccd719d
 ---> 250369b30e1f
Step 5 : VOLUME ["/test_container"]
 ---> Running in 72ca332d9809
 ---> 163deb2b1bc5
Successfully built 163deb2b1bc5
Removing intermediate container b8bfcb071441
Removing intermediate container d081b576878d
Removing intermediate container 5b8d2ccd719d
Removing intermediate container 72ca332d9809

kishore $ docker run -d -v / Пользователи / kishore / main_folder: / test_container k3_s3: последние c9f9a7e09c54ee1c2cc966f15c963b4af320b5203b8c46689033c1ab8872a0ea

kishore$ docker run -i -t k3_s3:latest /bin/bash

root@0f17e2313a46:/test_container# ls -al
total 8
drwx------  2 root root 4096 Apr 29 05:15 .
drwxr-xr-x 66 root root 4096 Apr 29 05:15 ..

root @ 0f17e2313a46: / test_container # exit Выход

kishore$ docker -v
Docker version 0.9.1, build 867b2a9

  • Я не знаю, как проверить версию boot2docker

Вопросы и проблемы:

  1. Как мне связать основную папку с папкой test_container, находящейся внутри контейнера докеров?
  2. Мне нужно сделать это автоматически, как это сделать, не используя команду run -d -v.
  3. Что происходит, если сбой boot2docker? Где хранятся файлы докеров (кроме Dockerfile)?



Имела та же проблема. Обнаружено это в документации докера :

Примечание. Каталог хоста по своей природе зависит от хоста. По этой причине вы не можете смонтировать каталог хоста из Dockerfile, инструкция VOLUME не поддерживает передачу host-dir, поскольку созданные изображения должны быть переносимыми. Каталог хоста не будет доступен для всех потенциальных хостов.

Таким образом, установка каталога для чтения и записи возможна только с параметром -v в команде docker run , так как другие ответы указывают правильно.




Возможно ли, что вы используете докер на OS X через boot2docker или что-то подобное.

Я сделал то же самое - команда правильная, но ничто (разумное) не монтируется в контейнере.

Как выясняется - это уже объясняется в документации докера . Когда вы вводите docker run -v /var/logs/on/host:/var/logs/in/container ... то /var/logs/on/host фактически отображается из VM-образа boot2docker , а не вашего Mac.

Вам придется подключить общую папку через виртуальную машину к вашему фактическому хосту (Mac в моем случае).




boot2docker вместе с гостевыми дополнениями VirtualBox
Как монтировать / Пользователи в boot2docker

https://medium.com/boot2docker-lightweight-linux-for-docker/boot2docker-together-with-virtualbox-guest-additions-da1e3ab2465c

tl; dr Создайте собственный пользовательский boot2docker.iso с дополнениями для VirtualBox (см. link ) или загрузите http://static.dockerfiles.io/boot2docker-v1.0.1-virtualbox-guest-additions-v4.3.12.iso и сохраните его to ~ / .boot2docker / boot2docker.iso.




[ДОПОЛНЕНО] Начиная с ~ июня 2017 года, Docker для Mac заботится обо всех досадных частях этого, где вам нужно общаться с VirtualBox. Он позволяет отображать в основном все на вашем локальном узле с использованием префикса /private . Больше информации here . [/ОБНОВИТЬ]

Все текущие ответы говорят о Boot2docker. Так как это теперь устарело в пользу докер-машины, это работает на докер-машине:

Во-первых, ssh в docker-machine vm и создайте папку, в которую мы будем сопоставлять:

docker-machine ssh $MACHINE_NAME "sudo mkdir -p \"$VOL_DIR\""

Теперь поделитесь папкой с VirtualBox:

WORKDIR=$(basename "$VOL_DIR")
vboxmanage sharedfolder add "$MACHINE_NAME" --name "$WORKDIR" --hostpath "$VOL_DIR" --transient

Наконец, ssh в docker-machine снова и смонтируйте папку, которую мы только что разделили:

docker-machine ssh $MACHINE_NAME "sudo mount -t vboxsf -o uid=\"$U\",gid=\"$G\" \"$WORKDIR\" \"$VOL_DIR\""

Примечание: для UID и GID вы можете в принципе использовать любые целые числа, если они еще не приняты.

Это проверено как на докер-машине 0.4.1 и докер 1.8.3 на OS X El Capitan.




docker run -v /host/directory:/container/directory -t IMAGE-NAME /bin/bash

docker run -v /root/shareData:/home/shareData -t kylemanna/openvpn /bin/bash

В моей системе я исправил ответ от nhjk, он работает безупречно, когда вы добавляете флаг -t .




Related