I want to run a Jenkins instance in a docker container.
I want Jenkins itself to be able to spin up docker containers as slaves to run tests in.
It seems the best way to do this is to use
docker run -v /var/run.docker.sock:/var/run/docker.sock -p 8080:8080 -ti my-jenkins-image
The Dockerfile
I'm using is
FROM jenkins
COPY plugins.txt /usr/share/jenkins/plugins.txt
RUN /usr/local/bin/plugins.sh /usr/share/jenkins/plugins.txt
USER root
RUN apt-get update && apt-get install -y docker.io
RUN usermod -aG docker jenkins
USER jenkins
If I start a bash session in my running container and run docker info
on my image I get
$ docker info
FATA[0000] Get http:///var/run/docker.sock/v1.18/info: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?
And if I run the bash session as root
docker exec -u 0 -ti cocky_mccarthy bash
root@5dbd0efad2b0:/# docker info
Containers: 42
Images: 50
...
So I guess the docker
group I'm adding the Jenkins user to is the group for the internal docker hence the socket is not readable without sudo
. That's kind of a problem as the Jenkins docker plugin etc are not set up to use sudo
.
How can I mount the socket so it can be used from the image without sudo
?