我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
当前回答
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 -i ubuntu /bin/bash -c 'cat > file' < file
从容器复制到主机目录
docker cp [container-name/id]:./app/[index.js] index.js
(假设您在dockerfile中创建了一个workdir/app)
从主机复制到容器
docker cp index.js [container-name/id]:./app/index.js
我刚刚开始使用docker来编译VLC,下面是您可以从容器来回复制文件的方法:
su -
cd /var/lib/docker
ls -palR > /home/user/dockerfilelist.txt
在这个txt中搜索一个熟悉的文件,你会得到文件夹,cd作为根目录,瞧!复制所有你想要的。
可能有一个包含“merged”的路径,我猜你想要的是包含“diff”的路径。
此外,如果您退出容器并想回到之前的位置:
docker ps -a
docker start -i containerid
我想这很有用,因为你没有用这样的命令命名任何东西
docker run -it registry.videolan.org:5000/vlc-debian-win64 /bin/bash
当然是黑客的方法,但那又怎么样!
您可以使用
ifconfig
然后只需输入Docker容器并键入
scp user_name@ip_address:/path_to_the_file destination
在任何情况下,如果您没有安装SSH客户端和服务器,只需使用以下方法进行安装:
sudo apt-get install openssh-server
我会装载并运行带有守护程序的映像,就像这里给出的那样;
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