Docker Копирование файла из узла в контейнер
Я пытаюсь скопировать набор файлов из хоста docker в контейнер.
В системе AUFS, непосредственно входящей в /var/lib/docker/aufs/..., работает.
Однако я являюсь еще одной системой с Fedora, у которой devicemapper является драйвером хранилища.
В этой системе, если я это сделаю:
[[email protected] tmp]# docker inspect -f '{{.Id}}' 393ef4b9f485
393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24
[[email protected] tmp]# cd /var/lib/docker/devicemapper/mnt/393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24
[[email protected] 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]# ls -l
total 0
[[email protected] 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]#
Я ничего не получаю.
Я пробовал все предложения от Копирование файлов с хоста на контейнер Docker
Использование tar кажется отличным, вместо прямого перехода к базовому FS. Но я не могу предположить, что tar будет присутствовать во всех контейнерах.
Если это актуально, я даже попытался создать файл в контейнере, но он, а затем нашел find. -name в /var/lib/docker/devicemapper/mnt безрезультатно.
Любые подсказки?
ИЗМЕНИТЬ 1:
Исходя из одного из ответов, добавляя эти ограничения.
Цель состоит в том, чтобы скопировать файлы в контейнер без. не изменять сборку контейнеров (файл Docker), b. Не устанавливать никаких демонов ssh или ftp. и c. даже не измените способ запуска контейнера.
EDIT 2: добавление информации о докере
# docker info
Containers: 1
Images: 21
Storage Driver: devicemapper
Pool Name: docker-253:0-397467-pool
Pool Blocksize: 65.54 kB
Backing Filesystem: extfs
Data file:
Metadata file:
Data Space Used: 4.261 GB
Data Space Total: 107.4 GB
Data Space Available: 103.1 GB
Metadata Space Used: 3.596 MB
Metadata Space Total: 2.147 GB
Metadata Space Available: 2.144 GB
Udev Sync Supported: true
Library Version: 1.02.90 (2014-09-01)
Execution Driver: native-0.2
Kernel Version: 3.17.4-301.fc21.x86_64
Operating System: Fedora 21 (Twenty One)
CPUs: 4
Total Memory: 3.86 GiB
Name: fedora-docker
Версия Docker - 1.6.0, а изображение контейнера - RHEL.
Ответы
Ответ 1
UPDATE:
Теперь команда командной строки docker cp работает в обоих направлениях.
См. документация docker cp
Использование
docker cp [ОПЦИИ] КОНТЕЙНЕР: SRC_PATH DEST_PATH | -
docker cp [ОПЦИИ] SRC_PATH | - КОНТЕЙНЕР: DEST_PATH
======= Оригинальный ответ ==============
Нашел самый простой способ работы с драйверами хранения:
cd /proc/`docker inspect --format "{{.State.Pid}}" <containerid>`/root
Протестировали это на Fedora с Devicemapper в качестве драйвера хранилища
и на Ubuntu с AUFS в качестве драйвера хранилища.
Работает для меня в обоих случаях.
Ответ 2
Этот ответ дает вам другое представление о копировании.
1 > Используйте этот способ, если вы знаете IP-адрес контейнера. Если ваша цель - просто взять файлы из системы хоста и поместить их в контейнер, вы можете сделать это разными способами. Протокол передачи файлов является более простым способом. вы можете настроить SSH-сервер (sshd) в своем контейнере докеров и использовать scp
или любые другие инструменты передачи файлов для этого.
2 > Совместное использование файлов через тома с помощью этой команды docker run -ti -v /host-path-of-directory-having-files/:/target-path-in-container/:rw image-name bash
. Вы можете ссылаться на эту ссылку https://docs.docker.com/userguide/dockervolumes/