2016-06-29 4 views
10

Я запускаю Jenkins и Docker на машине CentOS. У меня есть работа Jenkins, которая вытаскивает репозиторий Github и создает образ Docker. Когда я пытаюсь запустить работу, я получаю ошибку:Jenkins: Не удается подключиться к демону Docker

+ docker build -t myProject . Cannot connect to the Docker daemon. Is the docker daemon running on this host? Build step 'Execute shell' marked build as failure Finished: FAILURE

Это происходит, даже если я добавил Дженкинс к моему Докер через sudo usermod -aG docker jenkins группы пользователей и перезапустить мою машину. Как это исправить?

Кстати, если попытаться изменить команду sudo docker build -t myProject . я просто получаю ошибку sudo: sorry, you must have a tty to run sudo

+0

Что такое «Судо статус службы Докер» возвращение на вашей машине Centos? – lvthillo

+0

Он активен: статус докер 'Судо служба Перенаправление в/бен/systemctl статус docker.service ● docker.service - Docker Применение Контейнер Двигатель Loaded: загружен (/usr/lib/systemd/system/docker.service , включен, поставщик предустановлен: отключен) Активен: активен (с) с ср. 2016-06-29 14:10:13 UTC; 5h 40 мин. Назад Документы: https://docs.docker.com Основной PID: 24858 (докер) Память: 30.1M' – pcsram

+0

Хорошо, насколько я понимаю: Дженкинс не работает внутри докера? – lvthillo

ответ

19

После установки Дженкинс и Докер. Добавить Дженкинс пользователя dockergroup (как вы это делали)

sudo gpasswd -a jenkins docker 

Редактировать следующий файл

vi /usr/lib/systemd/system/docker.service 

И изменить это правило, чтобы выставить API:

ExecStart=/usr/bin/docker daemon -H unix:// -H tcp://localhost:2375 

Теперь пришло время, чтобы перезагрузить и перезапустите демон Docker

systemctl daemon-reload 
systemctl restart docker 

Тогда я перезагрузил Дженкинс и я был в состоянии выполнять команды Docker как пользователь Дженкинс в моих Дженкинс рабочих мест

sudo service jenkins restart 
+2

Спасибо, это работает. Любопытно, как добавление TCP-адреса в строку ExecStart влияет на Docker и способ общения с Дженкинсом? – pcsram

+1

Так что Дженкинс не может напрямую позвонить в Docker, даже если он установлен на том же компьютере? – pcsram

+11

Мне действительно не нравится этот ответ. Вы открыли 2375 в мире на своей машине. Вы должны хотя бы признать это в своем ответе и указать, что пользователи должны поставить его за брандмауэр. Вы также можете сократить диапазон IP-адресов. Есть ли причина принимать соединения из любой точки? – mttdbrd

1

Другой вариант, чтобы указать ваш Jenkins Docker хозяина к юниксовой: /// вар/выполнения/грузчиком. sock '

Это вместо того, чтобы управлять фактическим хостом докера и открывать его.

1

@lvthillo, ваш ответ хорош, но, недостаточно. Вам также необходимо создать группу докеров. См шаги после установки для ДокерУправление Docker как некорневой пользователь https://docs.docker.com/engine/installation/linux/linux-postinstall/#manage-docker-as-a-non-root-user

добавить пользователя работает Дженкинс в группе Докер.

E.g. если вы запускаете сервер Jenkins под jenkins пользователя:

Шаг 1: Создание Docker Group

sudo groupadd docker 

Шаг 2: Добавить пользователя в docker группе:

sudo usermod -aG docker jenkins 

Шаг 3: Выход и войдите в систему как jenkins, затем:

docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS    NAMES 

docker группе предоставляется специальная обработка демоном-докером при запуске только для этой цели. Любой пользователь этой группы теперь может вызывать докер без sudo. Используйте это с осторожностью.

https://docs.docker.com/engine/security/security/#docker-daemon-attack-surface

Смежные вопросы