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 ...