使用Docker(在Docker容器内部)的Jenkins用户

3

I have a dockerfile:

FROM jenkins:1.651.1
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
USER root
RUN groupadd docker
RUN usermod -a -G docker jenkins
USER jenkins

我将用户jenkins添加到了组docker中。 当我访问我的容器时:

jenkins@bc145b8cfc1d:/$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
jenkins@bc145b8cfc1d:/$ whoami
jenkins

这是我的容器中 /etc/group 的内容。
jenkins:x:1000:
docker:x:1001:jenkins

我的Jenkins用户在Docker组中

jenkins@bc145b8cfc1d:/$ groups jenkins
jenkins : jenkins docker

我做错了什么?我想使用docker命令与我的jenkins用户一起使用。我在Amazon EC2容器服务上。

这是我如何从我的镜像启动一个容器:

docker run -d -v /var/run/docker.sock:/var/run/docker.sock -v
/usr/bin/docker:/usr/bin/docker:ro -v
/lib64/libdevmapper.so.1.02:/usr/lib/x86_64-linux-gnu/libdevmapper.so.1.02
-v /lib64/libudev.so.0:/usr/lib/x86_64-linux-gnu/libudev.so.0
-p 8080:8080 --name jenkins -u jenkins --privileged=true -t -i
my-jenkins:1.0
2个回答

2
这是我的“解决方案”,但它只适用于Ubuntu(在我的CentOS上不行)。 Dockerfile
FROM jenkins:1.651.1
USER root
RUN apt-get update \
  && apt-get install -y apt-transport-https ca-certificates \
  && echo "deb https://apt.dockerproject.org/repo debian-jessie main" > /etc/apt/sources.list.d/docker.list \
  && apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D \
  && apt-get update -y \
  && apt-get install -y docker-engine
RUN gpasswd -a jenkins docker
USER jenkins

运行命令:

docker run -d -it -v /var/run/docker.sock:/var/run/docker.sock test-jenkins

在Ubuntu上:

jenkins@c73c683b02d7:/$ whoami
jenkins
jenkins@c73c683b02d7:/$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                                              NAMES
c73c683b02d7        test-jenkins        "/bin/tini -- /usr/lo"   2 minutes ago       Up 2 minutes        8080/tcp, 50000/tcp   

                         condescending_wing

我想这与gid有关: 在容器中(Ubuntu和CentOS上),使用命令cat /etc/group
jenkins:x:1000:
docker:x:999:jenkins

cat /etc/group on Ubuntu (also 999)

docker:x:999:ubuntu

在CentOS上查看/etc/group文件(不同的gid)

docker:x:983:centos

这个问题可能有解决方案。但我只需要Ubuntu,所以没有进一步了解。


相信你已经处理好了,gid docker需要在主机和容器中保持一致,以便/docker.sock可以被容器内的docker用户访问。 - BMitch

0

当您的容器正在运行时,您可以使用不同的用户“修补”到正在运行的容器中。

docker exec -ti -u 0 jenkins bash // root
docker exec -ti -u 1 jenkins bash // probably jenkins

使用root用户,您可以通过su jenkins命令从root用户切换到jenkins用户。

如果您想在现有容器内运行docker容器(似乎这是您正在尝试的),请记得使用--privileged标志启动您的docker容器,例如:docker run --privileged ...


我正在使用--privileged启动。当我使用-u root时,我能够执行docker命令,因为我是容器中的root用户。但我想编辑我的dockerfile,以便我能够使用我的jenkins用户执行这些命令。 - DenCowboy
是的,它在主机上运行。但我想在我的容器内成为Jenkins用户,而不是root用户。所以我尝试将我的Jenkins用户添加到docker组中,但似乎没有起作用。 - DenCowboy
让我们在聊天中继续这个讨论 - Jan Vladimir Mostert
你找到解决方案了吗? - Fabien Fleureau
@MaxC,你找到解决方案了吗?我也很好奇。 - Jan Vladimir Mostert
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接