Доступ к докеру внутри контейнера на Дженкинс Раб

Мой вопрос в основном является комбинацией сокета 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, но лучше по возможности избегать его

Другие вопросы по тегам