Make Jenkins run docker without sudo

2019-06-20 07:31发布

问题:

I would like to run Docker shell commands on Jenkins like:

docker ps

Is it possible to do it with out using any plugins? Since Jenkins isn't a user, but a service account how can I add to docker group?

回答1:

Following approach worked for me to run docker commands without any plugins

Rather than adding jenkins user to docker group, allowed jenkins user to run sudo commands with out prompting for password and then created an alias to avoid sudo in Dockerfile for jenkins slave. I had to install docker client in the container which connects to daemon running in the host machine.


 ## allowing jenkins user to run sudo commands
RUN echo "jenkins ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
 ## avoid typing sudo in command line
RUN echo "alias docker='sudo docker '" >> /home/jenkins/.bashrc



回答2:

First execute

sudo groupadd docker

Then execute

sudo usermod -aG docker $USER

Then logout its important to logout because your group membership is re-evaluated

Login and try again

docker ps

It works!



回答3:

(Taken from this answer: https://askubuntu.com/a/477554)

If you run on Ubuntu and Jenkins runs directly on the host machine (i.e. not inside a Docker container):

Add the docker group if it doesn't already exist:

sudo groupadd docker

Add the user "jenkins" to the docker group:

sudo gpasswd -a jenkins docker

Restart the Docker daemon:

sudo service docker restart

Either do a newgrp docker or log out/in to activate the changes to groups.



回答4:

I had the issue when I was running from jenkins pipeline. I added jenkins user to docker group, restarted the docker engine and rebooted the machine as well. However I still get the same error dial unix /var/run/docker.sock: connect: permission denied.

Finally I added jenkins to root group and it resolved my issue (ubuntu 18.04) (VM on Azure)

sudo gpasswd -a jenkins root
sudo service docker restart