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

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

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

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


当前回答

解决方案如下所示,

从Docker外壳,

root@123abc:/root#  <-- get the container ID

来自主机

cp thefile.txt /var/lib/docker/devicemapper/mnt/123abc<bunch-o-hex>/rootfs/root

文件应直接复制到文件系统中容器所在的位置。

其他回答

将点文件放入shell会话(使用base64转义)

有时,对shell启动执行单独的交互式命令会很麻烦。当我想将一个点文件复制到我的容器中,这样我的shell就会包含我的自定义项

docker exec -u root -it mycontainername bash -c "echo "$(cat ~/.bashrc | base64 -w 0)" | base64 --decode > /tmp/.bashrc_inside_container; bash --rcfile /tmp/.bashrc_inside_container"

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

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

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

我通常使用以下命令创建python服务器

python-m SimpleHTTPServer

然后使用wget将文件传输到docker中所需的位置。我知道这不是最好的方法,但我发现这要容易得多。

试试docker cp。

用法:

docker cp CONTAINER:PATH HOSTPATH

它将文件/文件夹从PATH复制到HOSTPATH。

如果像我这样的人不清楚@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获取它