以root用户身份运行docker映像,以非root用户身份运行服务

以root用户身份运行docker映像,以非root用户身份运行服务,docker,docker-compose,Docker,Docker Compose,从安全的角度来看,我试图理解 使用dockerfile中的user指令以非根用户身份运行映像本身 以root用户身份运行映像,以非root用户身份单独运行服务 使用者 在第二个选项中,将有一个以root用户身份运行并以非root用户身份启动服务的启动脚本 这两个相等吗?考虑到启动脚本以root用户身份运行,第二个选项是否易受攻击?启动服务后退出(或不退出)是否重要 如果这个问题已经被问到并回答了,请原谅。真正重要的是,一旦您的服务启动并运行,它就不会以root用户身份运行。(这在Docker

从安全的角度来看,我试图理解

  • 使用dockerfile中的
    user
    指令以非根用户身份运行映像本身
  • 以root用户身份运行映像,以非root用户身份单独运行服务
    使用者
在第二个选项中,将有一个以root用户身份运行并以非root用户身份启动服务的启动脚本

这两个相等吗?考虑到启动脚本以root用户身份运行,第二个选项是否易受攻击?启动服务后退出(或不退出)是否重要


如果这个问题已经被问到并回答了,请原谅。

真正重要的是,一旦您的服务启动并运行,它就不会以root用户身份运行。(这在Docker中没有那么重要,但“不要成为root”仍然被认为是最佳实践。)您提出的两个选项都是有效的方法

您的第二个选项“以根用户身份启动,然后删除权限”在Docker中并不常见,但它在精神上与大多数Unix守护进程的功能相匹配。这是我所知道的一件真正能做到的事情。特别是,它希望在启动时装载一些数据目录,因此在守护进程正确启动之前,它将数据目录作为根目录。我希望这是这种模式的一个非常典型的用法

如果您不需要进行这种启动前设置,那么在
Dockerfile
末尾指定一些任意的非root
USER
会更容易,并且会选中相同的“不要成为root”框


在尝试以当前主机用户的身份运行容器,或者尝试针对主机文件系统运行Docker中打包的工具时,会遇到很多问题。这很尴尬,因为Docker的一个关键设计目标是将容器与这些主机细节隔离开来。如果需要选择容器进程运行的用户,则需要标准的
docker run-u
选项,并且需要第一个选项。

谢谢David!这是个好消息。完全同意你的看法,docker对主机文件系统的依赖性比我预期的要大一点!