我正在尝试为我们使用的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容器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

如果像我这样的人不清楚@h3nrik答案中的mycontainer是什么意思,它实际上是容器id。为了将/app/example_scenes/1440p60中的WarpSquare.mp4文件从退出的docker容器复制到当前文件夹,我使用了这个。

docker cp `docker ps -q -l`:/app/example_scenes/1440p60/WarpSquare.mp4 .

其中docker ps-q-l提取最后退出实例的容器id。如果它不是已退出的容器,您可以通过docker容器ls或docker ps获取它

如果您能够使用容器注册表,appendlayer Python包将满足您的要求:

假设ubuntu:base在注册表中已经可用。

然后,您可以使用脚本在上面添加一个由一些本地文件组成的新层,将整个层保存为新图像(即ubuntu:test)。

$ pip install appendlayer
$ tar cvf - test.txt | appendlayer <host> <repository> <old-tag> <new-tag>

所有这些都无需重建或甚至将任何图像数据下载到本地计算机。

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

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

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

这是一个联机程序,用于在运行tomcat容器时复制单个文件。

docker run -v /PATH_TO_WAR/sample.war:/usr/local/tomcat/webapps/myapp.war -it -p 8080:8080 tomcat

这将把war文件复制到webapps目录,让你的应用程序立即运行。