Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jenkins 无法以非root用户身份运行docker?_Jenkins_Docker_Dockerfile - Fatal编程技术网

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
用户具有UID
1000
。您可以通过以下命令轻松验证这一点:
docker-run--rm-u jenkins--entrypoint/bin/id docker-registry:5000/bar/helloworld:001

uid=1000(詹金斯)gid=1000(詹金斯)组=1000(詹金斯)

在docker主机上,UID
1000
用于
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