使docker容器写入主机可以删除的文件

我有一个基于docker的构build环境 – 为了构build我的项目,我使用--volume参数运行--volume容器,以便可以访问我的项目目录并构build它。

问题是容器创build的文件不能被主机删除。 我目前唯一的解决方法是启动一个交互容器与目录加载并删除它。

底线问题 :有可能使docker写入已安装的区域文件的权限,以便主机以后可以删除它们?

这与Docker有关,与基本的Unix文件权限有关。 您的docker容器以root身份运行,这意味着容器创build的任何文件都由您的主机上的root拥有。 通过(a)确保文件/目录是使用用户标识创build的方式,或者(b)确保权限允许您删除文件,即使它们不是(c)使用提升的权限(例如, sudo rm ... )删除文件。

根据你在做什么,选项(一)可能很容易。 如果您可以作为非root用户运行contanier,例如:

 docker run -u $UID -v $HOME/output:/some/container/path ... 

那么一切都将正常工作,因为这些文件将与您的用户ID一起创build。

如果容器必须以root身份初始运行,则可以在ENTRYPOINTCMD脚本中处理root操作,然后切换到另一个uid以运行主应用程序。 要做到这一点,你需要传递你的用户id到容器(例如,作为一个环境variables),然后使用像runuser这样的东西切换到新的用户ID:

 exec runuser -u $TARGE_UID /some/command 

如果上述两个都不是一个选项,那么sudo rm -rf mydirectory应该像启动一个交互式容器一样工作。

如果你需要你的构build工件只是把它们放到下一个阶段的docker镜像上,那么使用多阶段构build选项可能是值得的。