DenCowboy
DenCowboy

Reputation: 15136

Jenkins user using docker (inside docker container)

I have a 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

I add my user jenkins to the group docker. When I access my container:

jenkins@bc145b8cfc1d:/$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
jenkins@bc145b8cfc1d:/$ whoami
jenkins

This is the content of my /etc/groupon my container

jenkins:x:1000:
docker:x:1001:jenkins

my jenkins user is in the docker group

jenkins@bc145b8cfc1d:/$ groups jenkins
jenkins : jenkins docker

What am I doing wrong? I want to use docker-commands with my jenkins user. I'm on Amazon EC2 Container Service.

This is how I start a container from my image:

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

Upvotes: 3

Views: 4668

Answers (2)

DenCowboy
DenCowboy

Reputation: 15136

This was my 'solution' but it only worked on Ubuntu (not on my 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

Run command:

docker run -d -it -v /var/run/docker.sock:/var/run/docker.sock test-jenkins

On 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

It has something to do with gid I think: cat /etc/group in container (on ubuntu and centos).

jenkins:x:1000:
docker:x:999:jenkins

cat /etc/group on Ubuntu (also 999)

docker:x:999:ubuntu

cat /etc/group on Centos (different gid)

docker:x:983:centos

There is probably a solution for this. But I only needed Ubuntu so did not go further in this.

Upvotes: 2

Jan Vladimir Mostert
Jan Vladimir Mostert

Reputation: 13002

Once your container is running, you can "patch" into the running container using different users using

docker exec -ti -u 0 jenkins bash // root
docker exec -ti -u 1 jenkins bash // probably jenkins

Using the root user, you can su jenkins if you need to switch to the jenkins user from the root user.

If you want to run docker containers inside your existing container (it seems like that is what you're trying), remember to start your docker container with the --privileged flag, eg docker run --privileged ...

Upvotes: 0

Related Questions