我正在尝试使用docker- maven插件构建docker映像,并计划使用jenkins执行mvn命令。我将jenkins.war部署在tomcat实例上,而不是作为非root用户运行的独立应用程序。问题是docker需要以root用户身份运行,因此maven命令需要以root用户身份运行,因此jenkins / tomcat需要以root用户身份运行,这不是一个好习惯(尽管我的非root用户身份是也很sudoer,所以我想没有多大关系)。
因此,最重要的是,我看到了两种解决方案:以非root用户身份运行docker(并需要有关如何执行此操作的帮助)或需要以root用户身份运行jenkins(并且不确定如何更改环境变量/ config和仍然没有切换到root)。
关于选择哪种解决方案以及如何实施的任何建议?
问题是docker需要以root用户身份运行,因此maven命令需要以root用户身份运行,
不可以,可以使用-u(--user)参数完成docker运行,以便在容器内使用非root用户。
-u
--user
以非root用户身份运行docker
您的用户(在主机上)需要成为docker组的一部分。然后,您可以与该用户一起运行docker服务。
docker
如所评论,这不是很安全。 看到:
chrisfosterelli/dockerrootplease
最后一个链接以以下发现结尾:
如果有一个已知的uid,容器内的进程正在执行,则可能很简单,例如限制对主机系统的访问,以使来自容器的uid具有有限的访问权限。 * 更好的解决方案是使用来启动具有已知uid的容器--user(您也可以使用用户名,但请记住,这只是从主机名用户名系统提供uid的一种更友好的方式), 然后限制对主机上uid的访问您已经确定容器将以运行 。 由于uid和用户名(以及gid和组名)是如何从容器映射到主机的,因此指定运行容器化进程的用户可以使该进程看起来由容器内部与外部的不同用户拥有。
关于最后一点,您现在具有 用户名称空间(userns)重新映射 (自docker1.10起,但我建议使用17.06,因为问题33844)。