Jenkins用户使用docker(在docker容器内)

时间:2016-05-09 13:06:20

标签: jenkins docker

我有一个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

我做错了什么?我想和我的jenkins用户一起使用docker-commands。我在亚马逊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 个答案:

答案 0 :(得分: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有关我认为: 容器中的cat /etc/group(在ubuntu和centos上)。

jenkins:x:1000:
docker:x:999:jenkins
在Ubuntu(也是999)

cat /etc/group

docker:x:999:ubuntu
Centos上的cat /etc/group(不同的gid)

docker:x:983:centos

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

答案 1 :(得分:0)

容器运行后,您可以使用

使用不同的用户“修补”到正在运行的容器中
docker exec -ti -u 0 jenkins bash // root
docker exec -ti -u 1 jenkins bash // probably jenkins

使用root用户,如果需要从root用户切换到jenkins用户,可以su jenkins

如果您想在现有容器中运行docker容器(看起来这就是您正在尝试的),请记住使用--privileged标志启动您的docker容器,例如docker run --privileged ...