我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。

我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。

我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。

如何将文件从主机复制到容器?


当前回答

解决方案如下所示,

从Docker外壳,

root@123abc:/root#  <-- get the container ID

来自主机

cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root

文件应直接复制到文件系统中容器所在的位置。

其他回答

答案很好,但过于具体。我发现docker ps是获取您感兴趣的容器id的好方法

mount | grep <id>

查看卷的安装位置。那是

/var/lib/docker/devicemapper/mnt/<id>/rootfs/

对我来说,但这可能是一条不同的路径,具体取决于操作系统和配置。现在只需将文件复制到该路径。

使用-v并不总是实用的。

将文件从主机复制到正在运行的容器

docker exec -i $CONTAINER /bin/bash -c "cat > $CONTAINER_PATH" < $HOST_PATH

根据Erik的回答以及Mikl和z0r的评论。

获取容器名称或短容器id:$docker ps获取完整容器id:$docker inspect-f“{{.Id}}”SHORT_CONTAINER_Id或CONTAINER_NAME复制文件:$sudo cp路径文件host/var/lib/docker/aufs/mnt/FUL_CONTAINER_ID/path-NEW-file

例子:

$ docker ps

CONTAINER ID      IMAGE    COMMAND       CREATED      STATUS       PORTS        NAMES

d8e703d7e303   solidleon/ssh:latest      /usr/sbin/sshd -D                      cranky_pare

$ docker inspect -f   '{{.Id}}' cranky_pare

or

$ docker inspect -f   '{{.Id}}' d8e703d7e303

d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5

$ sudo cp file.txt /var/lib/docker/aufs/mnt/**d8e703d7e3039a6df6d01bd7fb58d1882e592a85059eb16c4b83cf91847f88e5**/root/file.txt

通常有三种类型:

从容器到主机docker cp container_id:/bar/foo.txt。

docker cp命令也可以双向工作。

从主机到容器docker exec-i container_id sh-c“cat>/bar/foo.txt“</foo.txt文件从主机复制到容器的第二种方法:docker cp foo.txt mycontainer:/foo.txt

从一个容器到一个容器混合1和2docker cp container_id1:/bar/foo.txt。docker exec-i container_id2 sh-c“cat>/bar/foo.txt“</foo.txt文件

有一件事我试过了

启动docker容器后,如果在该容器下创建任何文件;您可以从docker主机的以下位置轻松访问该文件:-

cd/var/lib/dodocker/aufs/container/container_id/tmp

再试一次!