I'm trying to set up a Jenkins docker image similar to the approach described in https://getintodevops.com/blog/the-simple-way-to-run-docker-in-docker-for-ci

My Dockerfile looks like this:

FROM jenkins/jenkins:lts
USER root
RUN apt-get update && apt-get -y install sudo
RUN echo "jenkins ALL=NOPASSWD: ALL" >> /etc/sudoers
RUN apt-get install -y apt-transport-https ca-certificates \ 
    curl gnupg2 software-properties-common
RUN curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
RUN add-apt-repository "deb [arch=amd64] \ 
    https://download.docker.com/linux/debian stretch stable"
RUN apt-get update
RUN apt-get install -y docker-ce docker-ce-cli containerd.io
RUN usermod -aG docker jenkins
USER jenkins

And I'm starting the container like so:

docker run -d -v jenkins_home:/var/jenkins_home \
    -p 8080:8080 -p 50000:50000 \
    -v /var/run/docker.sock:/var/run/docker.sock customjenkins

However when I run a build (or exec into the container and do docker ps) I get the following:

Got permission denied while trying to connect to the Docker daemon socket 
at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.40/
containers/json: dial unix /var/run/docker.sock: connect: permission denied

The only way I've been able to get this to work is to chmod 777 the docker.sock file, which seems wrong to me. Is there some other step I am missing or other solution I can follow?

Host OS is Ubuntu 19.04, Docker version 19.03.0-beta2, build c601560


You need to run the command with sudo:

sudo docker run -d -v jenkins_home:/var/jenkins_home \
    -p 8080:8080 -p 50000:50000 \
    -v /var/run/docker.sock:/var/run/docker.sock customjenkins

Otherwise you don't have permissions to read/write to the socket, which is completely normal and expected. Using chmod 777 is indeed a bad idea, as it poses a security issue.

Besides using sudo there are two other suggested ways to use docker:

1. Add your user to the docker group:

sudo gpasswd -a $USER docker

Note: if the group docker does not exist, you can create it first:

sudo groupadd docker

2. Use ACL to add permission to your user to use the docker socket:

sudo setfacl -m user:$USER:rw /var/run/docker.sock

You can replace $USER with your username if you'd like.

  • Adding the ACL value for the user did the trick for me, thanks. – Chris Cooper Apr 24 at 10:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.