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

时间:2017-10-17 15:00:21

标签: docker

我有一个基于docker的构建环境 - 为了构建我的项目,我运行了一个带有--volume参数的docker容器,因此它可以访问我的项目目录并构建它。

问题是主机无法删除容器创建的文件。我目前唯一的解决方法是启动一个安装了目录的交互式容器并将其删除。

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

2 个答案:

答案 0 :(得分:1)

这与Docker关系不大,与基本的Unix文件权限有关。您的docker容器以root运行,这意味着容器创建的所有文件都由您的主机上的root拥有。您可以通过以下方式解决此问题:(a)确保使用您的用户ID创建文件/目录,或者(b)确保权限允许您删除文件,即使它们是'不属于您或(c)使用提升的权限(例如sudo rm ...)删除文件。

根据您的行为,选项(a)可能很容易。如果您可以以非root用户身份运行contanier,例如:

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

...然后一切都会正常工作,因为文件将使用您的用户ID创建。

如果容器最初必须以root运行,您可以在rootENTRYPOINT脚本中处理CMD次操作,然后切换到另一个uid运行主应用程序。为此,您需要将您的用户ID传递到容器中(例如,作为环境变量),然后使用runuser之类的内容切换到新的用户ID:

exec runuser -u $TARGE_UID  /some/command

如果以上都不是一个选项,那么sudo rm -rf mydirectory应该可以像旋转交互式容器一样工作。

答案 1 :(得分:0)

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