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

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

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

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


当前回答

您可以使用

ifconfig

然后只需输入Docker容器并键入

scp user_name@ip_address:/path_to_the_file destination

在任何情况下,如果您没有安装SSH客户端和服务器,只需使用以下方法进行安装:

sudo apt-get install openssh-server

其他回答

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

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

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

在我看来,您不必复制图像中的文件,但可以对文件使用GIT或SVN,然后设置与本地文件夹同步的卷。在运行容器时使用脚本,如果不从GIT存储库复制数据,则可以检查本地文件夹中是否已存在数据。这使你的形象非常轻盈。

我刚刚开始使用docker来编译VLC,下面是您可以从容器来回复制文件的方法:

su -
cd /var/lib/docker
ls -palR > /home/user/dockerfilelist.txt

在这个txt中搜索一个熟悉的文件,你会得到文件夹,cd作为根目录,瞧!复制所有你想要的。

可能有一个包含“merged”的路径,我猜你想要的是包含“diff”的路径。

此外,如果您退出容器并想回到之前的位置:

docker ps -a
docker start -i containerid

我想这很有用,因为你没有用这样的命令命名任何东西

docker run -it registry.videolan.org:5000/vlc-debian-win64 /bin/bash

当然是黑客的方法,但那又怎么样!

我会装载并运行带有守护程序的映像,就像这里给出的那样;

docker run -d -v /blah1/blah2:/mnt --name mntcontainer ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"

then

docker exec -it mntcontainer bash

以下是一种相当丑陋的方法,但它确实有效。

docker run -i ubuntu /bin/bash -c 'cat > file' < file