我正在尝试为我们使用的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(在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 ps是获取您感兴趣的容器id的好方法

mount | grep <id>

查看卷的安装位置。那是

/var/lib/docker/devicemapper/mnt/<id>/rootfs/

对我来说,但这可能是一条不同的路径,具体取决于操作系统和配置。现在只需将文件复制到该路径。

使用-v并不总是实用的。

您可以使用以下命令

将文件从主机复制到docker容器docker cp/主机文件container_id:/to_the_place_you_want_the_file_to_be将文件从docker容器复制到主机docker cp container_id:src_path to_the_place_you_want_the_file_to_be

我最喜欢的方法:

容器:

CONTAINER_ID=$(docker ps | grep <string> | awk '{ print $1 }' | xargs docker inspect -f '{{.Id}}')

文件.txt

mv -f file.txt /var/lib/docker/devicemapper/mnt/$CONTAINER_ID/rootfs/root/file.txt

or

mv -f file.txt /var/lib/docker/aufs/mnt/$CONTAINER_ID/rootfs/root/file.txt

在容器外部使用以下命令,我可以将文件从主机复制到容器。

 487b00c94dd4 = Container ID
D:\demo\demo.tar= Source Url
/myfolder= Container Url

 
docker cp "D:\demo\demo.tar" 487b00c94dd4:/myfolder