我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
当前回答
这是对标题中这个问题“将文件从主机复制到Docker容器”的直接回答。
试试docker cp。这是最简单的方法,甚至可以在我的Mac上使用。用法:
docker cp /root/some-file.txt some-docker-container:/root
这会将主机上的目录/root中的文件some-file.txt复制到名为somedocker container的Docker容器中,并复制到目录/root。它非常接近安全复制语法。如前一篇文章所示,您可以反过来使用它。也就是说,您还可以将文件从容器复制到主机。
在你下载这篇文章之前,请输入docker cp-help。阅读文档可能非常有用,有时。。。
如果您不喜欢这种方式,并且希望在已经创建并正在运行的容器中存储数据卷,那么娱乐是您目前唯一的选择。另请参阅如何将卷添加到现有Docker容器?。
其他回答
获取容器名称或短容器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
假设容器已经在运行,请键入给定的命令:
# 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 ps是获取您感兴趣的容器id的好方法
mount | grep <id>
查看卷的安装位置。那是
/var/lib/docker/devicemapper/mnt/<id>/rootfs/
对我来说,但这可能是一条不同的路径,具体取决于操作系统和配置。现在只需将文件复制到该路径。
使用-v并不总是实用的。
如果需要在正在运行的容器上执行此操作,可以使用docker-exec(在1.3中添加)。
首先,查找容器的名称或ID:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b9b7400ddd8f ubuntu:latest "/bin/bash" 2 seconds ago Up 2 seconds elated_hodgkin
在上面的示例中,我们可以使用b9b7400ddd8f或相关联的hodgkin。
如果要将主机上/tmp/somefile中的所有内容复制到容器中的/var/www:
$ cd /tmp/somefiles
$ tar -cv * | docker exec -i elated_hodgkin tar x -C /var/www
然后,我们可以在容器中执行/bin/bash并验证它是否工作:
$ docker exec -it elated_hodgkin /bin/bash
root@b9b7400ddd8f:/# ls /var/www
file1 file2
docker cp[OPTIONS]SRC_PATH CONTAINER:DEST_PATH从主机复制到容器。
docker cp[OPTIONS]CONTAINER:SRC_PATH DEST_PATH将从容器复制到主机。