我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
我正在尝试为我们使用的Docker容器构建一个备份和恢复解决方案。
我有一个我创建的Docker基础镜像ubuntu:base,不想每次都用Docker文件重新构建它来添加文件。
我想创建一个从主机运行的脚本,并使用ubuntu:base Docker映像创建一个新容器,然后将文件复制到该容器中。
如何将文件从主机复制到容器?
当前回答
另一个解决方法是使用好的旧scp。这在需要复制目录的情况下非常有用。
从主机运行:
scp FILE_PATH_ON_YOUR_HOST IP_CONTAINER:DESTINATION_PATH
scp foo.txt 172.17.0.2:foo.txt
如果需要复制目录:
scp -r DIR_PATH_ON_YOUR_HOST IP_CONTAINER:DESTINATION_PATH
scp -r directory 172.17.0.2:directory
一定要将ssh安装到容器中。
apt-get install openssh-server
其他回答
docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH
目标路径必须预先存在
假设容器已经在运行,请键入给定的命令:
# 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外壳,
root@123abc:/root# <-- get the container ID
来自主机
cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root
文件应直接复制到文件系统中容器所在的位置。
将文件从主机复制到正在运行的容器
docker exec -i $CONTAINER /bin/bash -c "cat > $CONTAINER_PATH" < $HOST_PATH
根据Erik的回答以及Mikl和z0r的评论。
我通常使用以下命令创建python服务器
python-m SimpleHTTPServer
然后使用wget将文件传输到docker中所需的位置。我知道这不是最好的方法,但我发现这要容易得多。