Jenkins 无法以非root用户身份运行docker?
我已经试过了,但没用 我已经创建了Jenkins 无法以非root用户身份运行docker?,jenkins,docker,dockerfile,Jenkins,Docker,Dockerfile,我已经试过了,但没用 我已经创建了jenkinsuser并将其添加到docker组 我还切换了dockerFile中的用户(见下文) 我启动容器如下 docker run-u jenkins-d-t-p 8080:8080-v/var/jenkins:/jenkins-p docker注册表:5000/bar/helloworld:001 容器启动良好。但当我看这个过程时,这就是我所拥有的 root 13575 1 1 09:34 ? 00:05:56 /usr/
jenkins
user并将其添加到docker组
我还切换了dockerFile中的用户(见下文)
我启动容器如下
docker run-u jenkins-d-t-p 8080:8080-v/var/jenkins:/jenkins-p docker注册表:5000/bar/helloworld:001
容器启动良好。但当我看这个过程时,这就是我所拥有的
root 13575 1 1 09:34 ? 00:05:56 /usr/bin/docker daemon -H fd://
root 28409 13575 0 16:13 ? 00:00:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -container-port 8080
第一个是守护进程。所以我想做根是可以的。
但是第二个(我通过发出sudo su-jenkins
切换到jenkins user)显示的是root
。我以jenkins用户的身份启动docker。为什么这个过程属于root
这是我的文件
#copy jenkins war file to the container
ADD http://mirrors.jenkins-ci.org/war/1.643/jenkins.war /opt/jenkins.war
RUN chmod 644 /opt/jenkins.war
ENV JENKINS_HOME /jenkins
RUN useradd -d /home/jenkins -m -s /bin/bash jenkins
USER jenkins
ENV HOME /home/jenkins
WORKDIR /home/jenkins
# Maven settings
RUN mkdir .m2
ADD settings.xml .m2/settings.xml
ENTRYPOINT ["java", "-jar", "/opt/jenkins.war"]
EXPOSE 8080
CMD [""]
编辑2
我确信集装箱正在运行。我可以把它系在容器上。
我还可以浏览jenkins的web ui,这只有在容器启动时没有错误(jenkins在容器内运行)时才可能实现
这是我在容器中的命令
ps -ef | grep java
jenkins 1 0 7 19:29 ? 00:00:28 java -jar /opt/jenkins.war
ls -l /jenkins
drwxr-xr-x 2 jenkins jenkins 4096 Jan 11 18:54 jobs
但是从主机文件系统中,我看到新创建的“jobs”目录显示为用户“admin”
在容器内部,jenkins进程(war)由“jenkins”用户启动。一旦jenkins启动,它将在“admin”用户下写入主机文件系统
这是我的整个dockerFile(注意:我不使用这里的dockerFile)
第二个过程
root 28409 13575 0 16:13 ? 00:00:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -container-port 8080
不是jenkins容器的流程,而是Docker引擎管理网络的内部流程
如果使用
ps
命令找不到应该在docker容器中运行的进程,则表示docker容器未运行
为了便于理解,请使用以下命令启动容器(添加--name test
):
然后键入docker ps
,您应该会看到您的容器正在运行。如果没有,请键入docker ps-a
,您应该可以看到它是用哪个退出代码崩溃的
如果您需要知道它崩溃的原因,请使用docker logs test
显示它的日志
要查找从官方Jenkins docker映像运行的Jenkins进程,请使用以下命令:
ps aux | grep java
编辑 为什么从docker主机的角度来看,这些文件似乎属于
admin
在docker映像中,jenkins
用户具有UID1000
。您可以通过以下命令轻松验证这一点:docker-run--rm-u jenkins--entrypoint/bin/id docker-registry:5000/bar/helloworld:001
uid=1000(詹金斯)gid=1000(詹金斯)组=1000(詹金斯)
在docker主机上,UID1000
用于admin
用户。您可以使用id admin
验证这一点,在您的案例中显示:
uid=1000(管理员)gid=1000(管理员)组=1000(管理员),10(控制盘)
Docker容器中可用的用户不是Docker主机中的用户。然而,这可能是巧合,他们有相同的UID。这就是为什么在docker主机上运行的ls-l
命令会告诉您文件归admin
用户所有
事实上,这些文件归UID
1000
用户所有,该用户恰好在docker主机上被命名为admin
,在docker映像上被命名为jenkins
。我确信docker容器正在运行,因为我能够连接到容器。此外,我可以浏览jenkins UI,这只有在容器已启动(容器运行jenkins)时才可能,并且当您使用ps
命令时,您是否使用a
显示来自所有用户(不仅是当前root
用户)的进程。ps aux | grep tini
显示了什么?我上面显示的ps命令位于主机而不是容器中。您是否要求我在容器内运行ps aux | grep tini
?。另外,我的问题是为什么docker进程(我以“jenkins”开头)没有显示..ps命令必须在docker主机上运行,而不是在Container中运行我已经更新了上面的“编辑”部分。请看一看,告诉我你的想法。谢谢
root 28409 13575 0 16:13 ? 00:00:00 docker-proxy -proto tcp -host-ip 0.0.0.0 -host-port 8080 -container-ip 172.17.0.2 -container-port 8080
docker run --name test -u jenkins -d -t -p 8080:8080 -v /var/foo:/foo -P docker-registry:5000/bar/helloworld:001
ps aux | grep java