我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
当前回答
如果需要在正在运行的容器上执行此操作,可以使用docker-exec(在1.3中添加)。
首先,查找容器的名称或ID:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9b7400ddd8f ubuntu:latest "/bin/bash" 2 seconds ago Up 2 seconds elated_hodgkin
在上面的示例中,我们可以使用b9b7400ddd8f或相关联的hodgkin。
如果要将主机上/tmp/somefile中的所有内容复制到容器中的/var/www:
$ cd /tmp/somefiles
$ tar -cv * | docker exec -i elated_hodgkin tar x -C /var/www
然后,我们可以在容器中执行/bin/bash并验证它是否工作:
$ docker exec -it elated_hodgkin /bin/bash
root@b9b7400ddd8f:/# ls /var/www
file1 file2
其他回答
cp命令可用于复制文件。
可以将一个特定文件复制到容器中,如:
docker cp foo.txt container_id:/foo.txt
可以从容器复制一个特定文件,如:
docker cp container_id:/foo.txt foo.txt
为了强调,container_id是一个容器id,而不是图像id。(使用docker ps查看包含container_id的列表。)
文件夹src中包含的多个文件可以通过以下方式复制到目标文件夹中:
docker cp src/. container_id:/target
docker cp container_id:/src/. target
参考:Docker CLI docs for cp
在1.8之前的Docker版本中,只能将文件从容器复制到主机。不是从主机到容器。
我会装载并运行带有守护程序的映像,就像这里给出的那样;
docker run -d -v /blah1/blah2:/mnt --name mntcontainer ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
then
docker exec -it mntcontainer bash
实现这一点的最简单的方法是,
查找容器iddocker cp<文件名><容器id>:<路径>
将文件复制到正在运行的容器中的另一个解决方案是使用tar:
tar -c foo.sh | docker exec -i theDockerContainer /bin/tar -C /tmp -x
将文件foo.sh复制到容器的/tmp中。
编辑:删除reduntant-f,感谢Maartens的评论。
docker cp SRC_PATH CONTAINER_ID:DEST_PATH
例如,我想将我的文件xxxx/download/jenkins复制到tomcat
我开始获取容器Tomcat的id
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63686740b488 tomcat "catalina.sh run" 12 seconds ago Up 11 seconds 0.0.0.0:8080->8080/tcp peaceful_babbage
docker cp xxxx/download/jenkins.war 63686740b488:usr/local/tomcat/webapps/