我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
当前回答
在docker环境中,所有容器都位于以下目录中:
/var/lib/docker/aufs/必需的docker id/
要将源目录/文件复制到容器的任何部分,请键入给定命令:
sudo cp-r mydir//var/lib/docker/aufs/mnt/required docker-id/mnt/
其他回答
如果使用Windows作为主机,您可以使用WinSCP连接到Docker并通过GUI传输文件。
如果在Linux上,scp命令也可以通过终端工作。
我只需从主机上直接复制容器所在位置的文件。
例如:
首先查找容器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 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/
试试docker cp。
用法:
docker cp CONTAINER:PATH HOSTPATH
它将文件/文件夹从PATH复制到HOSTPATH。
Docker cp命令是一个方便的实用程序,允许在容器和主机系统之间复制文件和文件夹。
如果要将文件从主机系统复制到容器,应使用docker cp命令,如下所示:
docker cp host_source_path container:destination_path
首先使用docker ps命令列出正在运行的容器:
abhishek@linuxhandbook:~$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
PORTS NAMES
8353c6f43fba 775349758637 "bash" 8 seconds ago Up 7
seconds ubu_container
您需要知道容器ID或容器名称。在我的例子中,docker容器的名称是ubu_container。容器ID为8353c6f43fba。
如果要验证文件是否已成功复制,可以按以下方式输入容器,然后使用常规Linux命令:
docker exec -it ubu_container bash
将文件从主机系统复制到docker容器使用docker cp复制类似于Linux中的复制命令。
我要将一个名为.py的文件复制到容器中的home/dir1目录。
docker cp a.py ubu_container:/home/dir1
如果文件被成功复制,您将不会在屏幕上看到任何输出。如果目标路径不存在,您将看到一个错误:
abhishek@linuxhandbook:~$ sudo docker cp a.txt ubu_container:/home/dir2/subsub
Error: No such container:path: ubu_container:/home/dir2
如果目标文件已经存在,它将被覆盖而不会发出任何警告。
您也可以使用容器ID而不是容器名称:
docker cp a.py 8353c6f43fba:/home/dir1