我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
当前回答
如果主机是CentOS或Fedora,则在/var/lib/docker/aufs中没有代理,但它位于/proc:
cp -r /home/user/mydata/* /proc/$(docker inspect --format "{{.State.Pid}}" <containerid>)/root
此cmd将数据目录的所有内容复制到id为“contained”的容器的/。
其他回答
最干净的方法是在启动容器时在容器上装载主机目录:
{host} docker run -v /path/to/hostdir:/mnt --name my_container my_image
{host} docker exec -it my_container bash
{container} cp /mnt/sourcefile /path/to/destfile
这是一个联机程序,用于在运行tomcat容器时复制单个文件。
docker run -v /PATH_TO_WAR/sample.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat
这将把war文件复制到webapps目录,让你的应用程序立即运行。
我只需从主机上直接复制容器所在位置的文件。
例如:
首先查找容器id:
root@**3aed62678d54**:/home#
然后在主机上,假设文件位于主目录中:
root@saasdock:/home/dnepangue# cp cheering_nasa.gif /var/lib/docker/aufs/mnt/**3aed62678d54**a5df47a4a00a58bb0312009c2902f8a37498a1427052e8ac454b/home/
返回容器。。。
root@**3aed62678d54**:/home# ls cheering_nasa.gif
有一件事我试过了
启动docker容器后,如果在该容器下创建任何文件;您可以从docker主机的以下位置轻松访问该文件:-
cd/var/lib/dodocker/aufs/container/container_id/tmp
再试一次!
另一个解决方法是使用好的旧scp。这在需要复制目录的情况下非常有用。
从主机运行:
scp FILE_PATH_ON_YOUR_HOST IP_CONTAINER:DESTINATION_PATH
scp foo.txt 172.17.0.2:foo.txt
如果需要复制目录:
scp -r DIR_PATH_ON_YOUR_HOST IP_CONTAINER:DESTINATION_PATH
scp -r directory 172.17.0.2:directory
一定要将ssh安装到容器中。
apt-get install openssh-server