Docker 正在将文件从主机复制到容器
Docker Copying file from host to container
我正在尝试将一组文件从 docker 主机复制到容器。
在 AUFS 系统上直接进入 /var/lib/docker/aufs/... 工作。
然而,我是另一个使用 Fedora 的系统,它以 devicemapper 作为存储驱动程序。
在这个系统上,如果我这样做:
[root@myhost tmp]# docker inspect -f '{{.Id}}' 393ef4b9f485
393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24
[root@myhost tmp]# cd /var/lib/docker/devicemapper/mnt/393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24
[root@myhost 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]# ls -l
total 0
[root@myhost 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]#
我一无所获。
我已经尝试了 Copying files from host to Docker container
的所有建议
用tar好像不错,不用直接去底层FS。但我不能假设 tar 会出现在所有容器中。
如果相关,我什至尝试在容器中创建一个文件,但它然后做了一个 find 。 -/var/lib/docker/devicemapper/mnt 中的名称无济于事。
有什么提示吗?
编辑 1:
根据其中一个答案,添加这些约束。
目的是将文件复制到一个容器中,而不需要一个。不修改容器构建(Docker文件),b。不安装任何 ssh 或 ftp 守护进程。和c。甚至没有改变容器的放置方式tar。
编辑 2:添加 docker 信息
:
# 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> 如果您知道容器的 IP,请使用这种方式。如果您的目标只是从主机系统获取文件并将其放入容器中,您可以使用不同的方式来完成。文件传输协议是一种更简单的方法。您可以在 docker 容器上设置 SSH 服务器 (sshd) 并使用 scp
或任何其他文件传输工具来执行此操作。
2> 使用此命令 docker run -ti -v /host-path-of-directory-having-files/:/target-path-in-container/:rw image-name bash
通过卷共享文件。你可以参考这个 link https://docs.docker.com/userguide/dockervolumes/
更新:
现在 docker cp 命令行命令可以双向工作。
请参阅 docker cp 文档
Usage
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
=======原答案==============
找到跨存储驱动程序的最简单方法:
cd /proc/`docker inspect --format "{{.State.Pid}}" <containerid>`/root
已在使用 Devicemapper 作为存储驱动程序的 Fedora 上对此进行了测试
在 Ubuntu 上使用 AUFS 作为存储驱动程序。
在这两种情况下都适合我。
我正在尝试将一组文件从 docker 主机复制到容器。 在 AUFS 系统上直接进入 /var/lib/docker/aufs/... 工作。 然而,我是另一个使用 Fedora 的系统,它以 devicemapper 作为存储驱动程序。 在这个系统上,如果我这样做:
[root@myhost tmp]# docker inspect -f '{{.Id}}' 393ef4b9f485
393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24
[root@myhost tmp]# cd /var/lib/docker/devicemapper/mnt/393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24
[root@myhost 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]# ls -l
total 0
[root@myhost 393ef4b9f485dafc78037f59bdbeda16d63b8338487248ed25b68cf544f29e24]#
我一无所获。 我已经尝试了 Copying files from host to Docker container
的所有建议用tar好像不错,不用直接去底层FS。但我不能假设 tar 会出现在所有容器中。
如果相关,我什至尝试在容器中创建一个文件,但它然后做了一个 find 。 -/var/lib/docker/devicemapper/mnt 中的名称无济于事。
有什么提示吗?
编辑 1: 根据其中一个答案,添加这些约束。 目的是将文件复制到一个容器中,而不需要一个。不修改容器构建(Docker文件),b。不安装任何 ssh 或 ftp 守护进程。和c。甚至没有改变容器的放置方式tar。
编辑 2:添加 docker 信息 :
# 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> 如果您知道容器的 IP,请使用这种方式。如果您的目标只是从主机系统获取文件并将其放入容器中,您可以使用不同的方式来完成。文件传输协议是一种更简单的方法。您可以在 docker 容器上设置 SSH 服务器 (sshd) 并使用 scp
或任何其他文件传输工具来执行此操作。
2> 使用此命令 docker run -ti -v /host-path-of-directory-having-files/:/target-path-in-container/:rw image-name bash
通过卷共享文件。你可以参考这个 link https://docs.docker.com/userguide/dockervolumes/
更新: 现在 docker cp 命令行命令可以双向工作。 请参阅 docker cp 文档
Usage
docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
=======原答案==============
找到跨存储驱动程序的最简单方法:
cd /proc/`docker inspect --format "{{.State.Pid}}" <containerid>`/root
已在使用 Devicemapper 作为存储驱动程序的 Fedora 上对此进行了测试 在 Ubuntu 上使用 AUFS 作为存储驱动程序。 在这两种情况下都适合我。