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

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

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

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


当前回答

docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

目标路径必须预先存在

其他回答

我只需从主机上直接复制容器所在位置的文件。

例如:

首先查找容器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环境中,所有容器都位于以下目录中:

/var/lib/docker/aufs/必需的docker id/

要将源目录/文件复制到容器的任何部分,请键入给定命令:

sudo cp-r mydir//var/lib/docker/aufs/mnt/required docker-id/mnt/

要在容器和本地文件系统之间复制文件/文件夹,请键入以下命令:

docker cp {SOURCE_FILE} {DESTINATION_CONTAINER_ID}:/{DESTINATION_PATH}

例如

docker cp /home/foo container-id:/home/dir

要获取contaner id,请键入给定的命令:

docker ps

以上内容摘自docker.com。

最干净的方法是在启动容器时在容器上装载主机目录:

{host} docker run -v /path/to/hostdir:/mnt --name my_container my_image
{host} docker exec -it my_container bash
{container} cp /mnt/sourcefile /path/to/destfile

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