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