如何将文件添加到现有的 docker 镜像? [复制]

Posted

技术标签:

【中文标题】如何将文件添加到现有的 docker 镜像? [复制]【英文标题】:How to add files to an existing docker image? [duplicate] 【发布时间】:2021-10-28 10:36:15 【问题描述】:

我有一个基于 Windows 的 docker 容器,运行它并在其中运行一个应用程序。但有时我需要向图像添加一个文件夹并运行另一个应用程序。 如何递归添加

\folder
 folder\*.*
\subfolder1
 subfolder1\*.*
\subfolder2
 subfolder2\*.*

从我的主机到我的图像?

【问题讨论】:

你能在新文件中构建一个派生图像FROM原始图像COPYing吗?还是在启动容器时使用绑定挂载? 同样的问题再次***.com/questions/29939419/… 再一次***.com/questions/22049212/… 【参考方案1】:

你可以使用docker cp:

docker cp 实用程序将 SRC_PATH 的内容复制到 DEST_PATH。您可以从容器的文件系统复制到本地机器,反之亦然,从本地文件系统复制到容器。

docker cp /path/to/dir mycontainer:/path/in/container/

cp 命令的行为类似于 Unix cp -a 命令,在目录中递归复制并尽可能保留权限。

此外,如文档中所述,如果这不可行,您可以使用以下 tar 的一些技巧。

tar Ccf $(dirname SRC_PATH) - $(basename SRC_PATH) | docker exec -i CONTAINER tar Cxf DEST_PATH -

【讨论】:

您以这种方式所做的任何更改都将在容器退出后立即丢失。 不,如果你使用提交。 docker commit 会创建一个映像,当一年内有强制性的关键安全更新时,您将无法重新创建该映像。这根本不是最佳实践。 是的,没错。但这仍然是可能的。我个人也不会这样做。我仍然看到它的用例。也许是为了保存对业务至关重要的东西,因为有人一开始就没有遵循最佳实践。也许 docker CP 也可以用于调试和开发。通常我会使用它从容器中获取默认配置,但是,嘿,你永远不知道人们在做什么。 我运行 docker,它处于活动状态,>docker ps 显示它,然后尝试运行 PS D:\> docker cp d:/mc myxxx:c:/app/mc/ 来自错误响应守护进程:不支持针对正在运行的 Hyper-V 容器的文件系统操作

以上是关于如何将文件添加到现有的 docker 镜像? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何将一些脚本添加到现有的 swf 文件中?

如何使用Golang将文件添加到现有的zip文件中

如何将一些脚本添加到现有的swf文件?

iText - 将内容添加到现有的 PDF 文件

如何将打字稿添加到现有的 vue3 项目?

如何将 Artisan cli 添加到现有的 laravel 项目?