Я пытаюсь запустить Docker внутри моего подчиненного контейнера Jenkins на Centos7.1. Это шаги, которые я выполнил в своем файле докеров:
FROM java:8
ARG user=jenkins
ARG group=jenkins
ARG uid=1000
ARG gid=1000
RUN groupadd -g ${gid} ${group} \
&& useradd -d "$JENKINS_HOME" -u ${uid} -g ${gid} -m -s /bin/bash ${user}
RUN groupadd -g 983 docker \
&& gpasswd -a ${user} docker
Итак, у меня есть пользователь jenkins (id1000) в группе jenkins (gid1000) + в группе docker (gid983). Почему я выбрал гид 983? Что ж, если я проверю /etc/group
на своем хосте, я увижу:
docker:x:983:centos
В моем сценарии создания докеров я монтирую свой сокет докера, поэтому я использовал тот же gid, что и на моем хосте.
Часть docker-compose:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /usr/bin/docker:/usr/bin/docker
Когда я exec
внутри своего контейнера как root:
root@c4af16c386d7:/var/jenkins_home# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
jenkins-slave 1.0 94a5d6606f86 10 minutes
jenkins 2.7.1 b4974ba62598 3 weeks ago 741 MB
java 8-jdk 264282a59a95 7 weeks ago 669.2 MB
Но как пользователь jenkins:
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
В моем контейнере:
cat /etc/passwd
jenkins:x:1000:1000::/var/jenkins_home:/bin/bash
cat /etc/group
jenkins:x:1000:
docker:x:983:jenkins
Дополнение:
$ docker exec -it ec52d4125a02 bash
root@ec52d4125a02:/var/jenkins_home# whoami
root
root@ec52d4125a02:/var/jenkins_home# su jenkins
jenkins@ec52d4125a02:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a23521523249 jenkins:2.7.1 "/bin/tini -- /usr/lo" 20 minutes ago Up 20 minutes 0.0.0.0:8080->8080/tcp, 0.0.0.0:32777->22/tcp, 0.0.0.0:32776->50000/tcp jenkins-master
ec52d4125a02 jenkins-slave:1.0 "setup-sshd" 20 minutes ago Up 20 minutes 0.0.0.0:32775->22/tcp, 0.0.0.0:32774->8080/tcp, 0.0.0.0:32773->50000/tcp jenkins-slave
но:
$ docker exec -it -u jenkins ec52d4125a02 bash
jenkins@ec52d4125a02:~$ docker ps
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
В первом случае мой пользователь jenkins:
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins),983(docker)
Во втором случае:
uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)
FROM
в файле Dockerfile. Я сделал что-то подобное с основными отличиями в том, что мой образ Jenkins устанавливает Docker, а не монтирует исполняемый файл, а мои команды основаны на Debian. Ваша переменная$DOCKER_HOST
определена внутри вашего контейнера? - person BMitch   schedule 04.08.2016id
. Не могу воспроизвести вашу проблему. - person BMitch   schedule 05.08.2016