我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
当前回答
我刚刚开始使用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
当然是黑客的方法,但那又怎么样!
其他回答
假设容器已经在运行,请键入给定的命令:
# cat /path/to/host/file/ | docker exec -i -t <container_id> bash -c "/bin/cat > /path/to/container/file"
要使用共享目录共享文件,请键入以下命令运行容器:
# docker run -v /path/to/host/dir:/path/to/container/dir ...
注意:由于容器的用户与主机的用户不同,因此可能会出现权限问题。
我在这里尝试了大多数(通过投票)的解决方案,但在docker 17.09(2018年)中不再有/var/lib/docker/aufs文件夹。
这个简单的docker cp解决了这个任务。
docker cp c:\path\to\local\file container_name:/path/to/target/dir/
如何获取container_name?
docker ps
有一个NAMES部分。不要使用aIMAGE。
我会装载并运行带有守护程序的映像,就像这里给出的那样;
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。
用法:
docker cp CONTAINER:PATH HOSTPATH
它将文件/文件夹从PATH复制到HOSTPATH。
实现这一点的最简单的方法是,
查找容器iddocker cp<文件名><容器id>:<路径>