Совместное использование каталогов в контейнере Docker как с Dockerfile, так и после запуска контейнера

Обмен данными между работающим контейнером Docker и моим хостом (на AWS) кажется слишком сложным. Из документации докера кажется, что мне нужно указать тома при запуске контейнера.

Я нашел это: https://github.com/synack/docker-rsync Но это рекурсивно копировать только с хост-машины в док-контейнер

Я ищу способ создать (желательно в Dockerfile) папку, видимую на моем хост-компьютере в AWS, где я могу scp файлы в эту папку, и они будут видны в моем док-контейнере. Я также ищу свой образ докера, чтобы иметь возможность писать в эту папку, поэтому, если контейнер остановлен, я не потеряю эти файлы.

В качестве примечания я уже объявил в своем Dockerfile VOLUME/Training-master, но я не знаю, как получить к нему доступ с моей машины, и когда я остановил контейнер, я потерял данные.

Кто-нибудь знает, как это сделать, или они могут указать мне правильное направление?


person wprins    schedule 08.12.2015    source источник


Ответы (3)


То, что вы ищете, предоставляется параметрами времени выполнения докера. Задокументировано здесь: http://docs.docker.com/engine/userguide/dockervolumes/#mount-a-host-directory-as-a-data-volume

В конце четко указано

Note: The host directory is, by its nature, host-dependent. 
For this reason, you can’t mount a host directory from Dockerfile 
because built images should be portable. A host directory wouldn’t 
be available on all potential hosts.
person Raghav    schedule 08.12.2015

Как сказал Рагхав, диск нельзя создать и использовать из файла Dockerfile из-за переносимости образа.

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

$ sudo docker run -itd -v /home/ubuntu/Sharing dockeruser/imageID:version bash

/home/ubuntu/Sharing -- Путь к общей папке на хост-компьютере

/Share -- Путь к общей папке в моем контейнере

dockeruser/imageID:version -- имя вашего контейнера

-v -- указывает, что вы создаете том

-d -- демонизирует контейнер, переводит его в фоновый режим

bash -- команда для выполнения контейнера

person wprins    schedule 10.12.2015

Просто для справки для пользователей Windows:

1) Вы можете смонтировать папку хоста в контейнер с помощью

docker run -ti -v C:\local_folder\:c:\container_folder container1

2) Кроме того, вы можете создать том:

docker volume create --name temp_volume

См. абсолютный путь тома:

docker volume inspect temp_volume 

mountpoint — это абсолютный путь к тому. Вы можете добавлять/удалять файлы из этого пути. Затем вы можете установить его в контейнер:

docker run -ti -v temp_volume:c:\tmploc container1

Обратите внимание, что и хост, и контейнер являются машинами Windows.

person smttsp    schedule 31.10.2019