我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
当前回答
在容器外部使用以下命令,我可以将文件从主机复制到容器。
487b00c94dd4 = Container ID
D:\demo\demo.tar= Source Url
/myfolder= Container Url
docker cp "D:\demo\demo.tar" 487b00c94dd4:/myfolder
其他回答
您可以使用以下命令
将文件从主机复制到docker容器docker cp/主机文件container_id:/to_the_place_you_want_the_file_to_be将文件从docker容器复制到主机docker cp container_id:src_path to_the_place_you_want_the_file_to_be
如果Dockerfile中没有将目录定义为卷,则/var/lib/docker/aufs/mnt//将起作用。但在某些情况下,容器中的目录被定义为卷。在这种情况下,aufs/mnt/*/下的内容和容器看到的内容不同。
您需要使用docker inspect检查集装箱,然后查找体积。在那里,您可以看到类似/var/lib/docker/vfs/dir/fe940b的内容。。。(id)。您需要在此处添加/修改文件,而不是在aufs/mnt/*下。
令人困惑的是,这些文件也出现在/aufs/mnt/*下。我花了很长时间才弄明白为什么这里的变化对我不起作用。
我会装载并运行带有守护程序的映像,就像这里给出的那样;
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
从容器复制到主机目录
docker cp [container-name/id]:./app/[index.js] index.js
(假设您在dockerfile中创建了一个workdir/app)
从主机复制到容器
docker cp index.js [container-name/id]:./app/index.js
如果需要在正在运行的容器上执行此操作,可以使用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