我正在尝试为我们使用的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 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
在我看来,您不必复制图像中的文件,但可以对文件使用GIT或SVN,然后设置与本地文件夹同步的卷。在运行容器时使用脚本,如果不从GIT存储库复制数据,则可以检查本地文件夹中是否已存在数据。这使你的形象非常轻盈。
解决方案如下所示,
从Docker外壳,
root@123abc:/root# <-- get the container ID
来自主机
cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root
文件应直接复制到文件系统中容器所在的位置。
假设容器已经在运行,请键入给定的命令:
# 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 ...
注意:由于容器的用户与主机的用户不同,因此可能会出现权限问题。
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版本中,只能将文件从容器复制到主机。不是从主机到容器。