jenkins用户使用docker(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 

这是我的'解决scheme',但它只适用于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我想:容器中的猫/etc/group (在Ubuntu和centos上)。

 jenkins:x:1000: docker:x:999:jenkins 

Ubuntu上的cat /etc/group (也是999)

 docker:x:999:ubuntu 

cat /etc/group在Centos上(不同的gid)

 docker:x:983:centos 

这可能是一个解决scheme。 但是我只需要Ubuntu,所以在这里就不再进一步了。

一旦你的容器正在运行,你可以使用不同的用户“修补”到正在运行的容器中

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

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

如果你想在你现有的容器中docker run --privileged ...容器(看起来就是你正在尝试的),记得用--privileged标志启动你的--privileged容器,例如docker run --privileged ...