我遇到的问题类似于here得到回答的问题。
在答案中,建议在docker映像中使用fixuid以便(我引用)
我们已针对此问题创建了解决方法,该方法可更改Docker 在构建时设置的容器的用户/组和文件权限 在运行时启动容器的UID / GID的时间。
项目和安装说明位于: https://github.com/boxboat/fixuid
示例:
- 使用用户/组dockeruser:dockergroup作为UID / GID 1000:1000构建Docker容器。
- 主机以UID / GID 1001:1002的身份运行。
- 图像通过docker run -u 1001:1002运行。 fixuid将:
- 将dockeruser UID更改为1001
- 将dockergroup GID更改为1002
- 将旧dockeruser:dockergroup的所有文件权限更改为1001:1002
- 将容器内的$ HOME更新为dockeruser $ HOME
- 现在容器和主机UID / GID匹配,并且在主机挂载上在容器中创建的文件将匹配。
它可以作为ENTRYPOINT或作为启动脚本的一部分运行。它是 以setuid作为root拥有的二进制文件安装在容器中 位,并升级特权以进行适当的更改。它 应该只在开发容器中使用。
但是当我尝试这样做时,我得到了
fixuid: already ran on this system; will not attempt to change UID/GID
因此未更改UID会导致很多问题
答案 0 :(得分:1)
正如您在fixuid
的源代码中所看到的,(两次)不运行此二进制文件有一个(微小的)安全性(因为它是setuid root
,所以非常危险):
文件/var/run/fixuid.ran
为checked,表示文件在运行前存在。
好像有人在启动阶段运行了fixuid
二进制文件。可能在入口点(可能会调用另一个入口点,依此类推)中,或者在实际运行命令时在入口点之后。
fixuid
可以在入口点或中用作命令的外壳包装。
如果您同时尝试这两种情况,则会收到该消息。