Доступ к докеру внутри контейнера на Дженкинс Раб
Мой вопрос в основном является комбинацией сокета Access Docker внутри контейнера и доступа к хосту Docker из контейнера (jenkins) Docker
Моя цель
запускать полностью докернизированную Jenkins, включая динамических подчиненных, и возможность создавать docker-контейнеры внутри подчиненных.
За исключением последней части, все уже работает благодаря https://github.com/maxfields2000/dockerjenkins_tutorial если Unix-docker-sock должным образом предоставлен мастеру Jenkins.
Эта проблема
в отличие от ведомых, которые предоставляются динамически, мастер запускается через docker-compose и, таким образом, имеет надлежащий доступ к сокету UNIX.
Для рабов, которые порождаются динамически, этот подход не работает. Я попытался перенаправить доступ к докеру, как
VOLUME /var/run/docker.sock
VOLUME /var/lib/docker
во время построения изображения. К сожалению, пока я получаю Permission denied (socket: /run/docker.sock)
при попытке доступа к docker.sock
в подчиненном, который был создан как: https://gist.github.com/geoHeil/1752b46d6d38bdbbc460556e38263bc3 Странная вещь: пользователь в подчиненном является пользователем root.
Так почему я не имею доступа к docker.sock
? Или как я мог сжечь в --privileged
флаг, чтобы проблема отказа в разрешении исчезла?
1 ответ
В docker 1.10 введено новое пространство имен User, поэтому совместного использования docker.sock недостаточно, так как root внутри контейнера больше не является root на хост-машине. Недавно я также поиграл с контейнером Jenkins и хотел создать контейнеры с использованием механизма докера хоста. Шаги, которые я сделал:
Найти идентификатор группы для группы докеров:
$ id
..... 999(docker)
Запустите контейнер jenkins с двумя томами: один содержит исполняемый файл Docker-клиента, а другой - общий Unix-сокет Docker. Обратите внимание, как я использую --group-add
добавить пользователя контейнера в группу Docker, чтобы разрешить доступ:
docker run --name jenkins -tid -p 8080:8080 --group-add=999 -v /path-to-my-docker-client:/home/jenkins/docker -v /var/run/docker.sock:/var/run/docker.sock jenkins
Проверено и установлено, что оно работает
docker exec -ti jenkins bash
./docker ps
Подробнее о дополнительных группах читайте здесь
Другой подход будет использовать --privileged
флаг вместо --group-add, но лучше по возможности избегать его