从安全角度来看,我试图了解两者之间的区别
USER
指令以非root用户身份运行映像本身第二个选项中,将有一个启动脚本,该脚本以root身份运行,并以非root用户身份启动服务。
这两个等效吗?考虑到启动脚本以root用户身份运行,第二个选项是否容易受到攻击?启动服务后退出(是否退出)有关系吗?
对不起,如果这个问题已经被问到并回答了。
答案 0 :(得分:1)
真正重要的是,一旦您的服务启动并运行,它就不会以root身份运行。 (这在Docker中比不重要要重要,但是“不要成为根”仍然被认为是最佳实践。)您建议的两种选择都是有效的方法。
您的第二个选项“以root身份启动,然后放弃特权”在Docker中并不常见,但在精神上与大多数Unix守护程序一样。 official Hashicorp Consul image是我所知道的唯一一件事。特别是,它希望启动时会挂载一些数据目录,因此在守护程序正常启动之前,它将chown -R consul
作为根目录{}。我希望这是这种模式的典型用法。
如果您不需要进行这种预启动设置,则在USER
末尾指定一些任意的非根Dockerfile
会更容易实现,并检查相同的“ don”成为根”框。
围绕如何尝试以当前主机用户身份运行容器或尝试针对主机文件系统运行Docker中打包的工具有很多SO问题。这很尴尬,因为Docker的主要设计目标是将容器与这些主机详细信息隔离。如果需要选择运行容器进程的用户,则需要标准的docker run -u
选项,并且需要第一个选项。