我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
当前回答
这是将数据从Docker复制到Host的命令:
docker cp container_id:file path/filename /hostpath
docker cp a13fb9c9e674:/tmp/dgController.log /tmp/
以下是将数据从主机复制到docker的命令:
docker cp a.txt ccfbeb35116b:/home/
其他回答
试试docker cp。
用法:
docker cp CONTAINER:PATH HOSTPATH
它将文件/文件夹从PATH复制到HOSTPATH。
获取容器名称或短容器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
tar和dockercp是复制目录中所有内容的好组合。
创建数据卷容器
docker create --name dvc --volume /path/on/container cirros
保留目录层次结构
tar -c -C /path/on/local/machine . | docker cp - dvc:/path/on/container
检查您的工作
docker run --rm --volumes-from dvc cirros ls -al /path/on/container
这是对标题中这个问题“将文件从主机复制到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容器?。
我在这里尝试了大多数(通过投票)的解决方案,但在docker 17.09(2018年)中不再有/var/lib/docker/aufs文件夹。
这个简单的docker cp解决了这个任务。
docker cp c:\path\to\local\file container_name:/path/to/target/dir/
如何获取container_name?
docker ps
有一个NAMES部分。不要使用aIMAGE。