为什么Docker官方图像不按照"最佳实践"的要求使用USER

sou*_*edi 6 docker dockerfile

Postgres,mariadb,mysql不使用USER.据推测,正在审查官方图像是否符合最佳实践文档,该文档要求用户尽可能使用.为什么?

sou*_*edi 4

从根本上来说,USER 在官方镜像中是不可能的。docker run official-image bash它与“初级用户应该能够无需了解 --entrypoint”的要求相冲突。如果您没有 root 权限,则无法编辑配置文件、安装 strace 等软件包……或者特别是修复卷中的 UID。实际上,官方图像风格认为是(a)最佳实践。(因此 Docker 用户指南应该重点关注以非 root 身份运行守护进程,而不是专门针对 USER)


国际海事组织这是一个问题。您可以学习的流行示例并不表明需要设置固定 UID。否则,如果您使用添加其他用户的基础映像进行更新,则必须手动干预。最佳实践说您应该考虑设置固定 UID,但他们甚至没有显示它的示例。使用 USER 的简单 Dockerfile的突出示例并未设置固定的 UID。官方映像也没有设置固定的 UID - 假装这不是问题 - 但随后会使用 暴力破解数据卷,因为它们的入口点脚本以 root 身份运行。不是很令人印象深刻。chown


从技术上讲,可以通过向 Dockerfile 添加更多内容chown和 UID 交换来修复官方 Dockerfile,但这似乎是不可取的。

我想另一种选择是依赖于路径的更新。也就是说,保留它,chown直到每个人都完成了固定 UID 的自动更新(几个月?),然后放弃它。