将docker作为非root用户运行,或者以root用户的身份在tomcat上运行jenkins

我正在尝试使用docker-maven插件构builddocker镜像,并计划使用jenkins执行mvn命令。 我将jenkins.war部署在tomcat实例上,而不是作为非root用户运行的独立应用程序。 问题是docker需要以root用户身份运行,因此maven命令需要以root用户身份运行,因此jenkins / tomcat需要以root用户身份运行,这不是一个好习惯(虽然我的非root用户是也sudoer,所以我猜不会有太大的关系)。

所以底线,我看到了两个解决scheme:要么作为非root用户运行docker(并需要帮助如何做到这一点)或需要运行jenkins作为根(不知道如何实现,因为我改变了环境variables/configuration和仍然不切换到根)。

有哪些解决scheme可供select以及如何实施?

问题是docker需要以root用户身份运行,所以maven命令需要以root用户身份运行,

不,docker运行可以用-u ( –user )参数完成 ,以便在容器内使用非root用户。

运行docker作为非root用户

您的用户(在主机上)需要成为docker组的一部分 。 然后你可以用这个用户运行docker服务。

正如所评论的,这不是很安全。
看到:

  • chrisfosterelli/dockerrootplease
  • “ 了解如何在Docker容器中使用uid和gid ”

最后的链接以下列结果结束:

  • 如果有一个已知的uid容器内的进程正在执行,它可以像限制对主机系统的访问一样简单,以便来自容器的uid具有有限的访问权限。
  • 更好的解决方法是使用--user (也可以使用用户名,但记住它只是从主机的用户名系统提供uid的友好方式) 启动带有已知uid的容器然后限制对uid在你决定容器运行的主机上
  • 由于用户名和用户名(以及gid和组名)如何从一个容器映射到主机,指定一个容器化进程运行的用户可以使该进程看起来在不同用户的容器之外。

关于最后一点,你现在有用户命名空间(用户)重新映射 (因为docker1.10,但我build议17.06,因为问题33844 )。

我也坚持如何设置docker构build服务器。

这里是我现在看到的地面真相…

  • Docker命令需要root权限

    • 这是因为如果可以运行任意的docker命令,那么你在主机上拥有和root相同的权限。 (你可以在内部build立一个以root用户身份运行的容器,将文件系统挂载到主机上的任何地方,从而允许任何root操作。)
  • “docker工人”组是一个大谎言恕我直言。 这与成员根目录是一样的。

  • 我可以看到,将docker与任何非root用途的安全包装在一起的唯一方法是构build自定义的bash脚本来启动特定的docker命令,然后仔细审查这些命令的安全影响,然后将这些脚本添加到sudoers文件(授予非root用户的无密码sudo)。

在我们将docker集成到开发stream水线的世界中(例如,在Maven构build中放置docker命令或允许开发人员为docker构build服务器构build定义进行任意更改),我已经知道如何维护任何安全性。