jenkins in docker - Невозможно подключиться к демону Docker в unix: ///var/run/docker.sock. Работает ли демон Docker? - PullRequest
0 голосов
/ 08 марта 2019

Я бегу https://hub.docker.com/r/jenkinsci/blueocean/ в докере. Попытка построить образ докера в jenkins.

но я получаю следующую ошибку:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

очевидно, что версия jenkins в Docker не имеет доступа к двоичному файлу Docker.

Я подтвердил это,

docker exec -it db4292380977 bash
docker images
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

"db4292380977" - это запущенный контейнер. Это показывает ту же ошибку.

Вопрос:

  • как мне разрешить доступ к докеру в контейнере jenkins?

Ответы [ 3 ]

2 голосов
/ 08 марта 2019

Docker-клиент установлен на образе jenkinsci/blueocean, но не на демоне. Docker клиент будет использовать демон (по умолчанию через сокет unix:///var/run/docker.sock). Для работы Docker клиенту необходим демон Docker, вы можете прочитать Docker Architecture для получения дополнительной информации.

Что вы можете сделать:

Использовать изображение Docker-in-Docker (DinD)

Образ библиотеки Docker предоставляет способ запуска демона Docker в Docker, который затем можно использовать из другого контейнера. Например, используя обычный интерфейс командной строки:

docker run --name docker-dind --privileged -d docker:stable-dind
docker run --name jenkins --link=docker-dind -d jenkinsci/blueocean
docker exec jenkins docker -H docker-dind images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

Демон Docker запускается в контейнере docker-dind и может быть доступен с тем же именем хоста. Вам просто нужно предоставить клиенту Docker хост демона (в этом примере -H docker-dind, вы также можете использовать переменную DOCKER_HOST env, как описано в the doc ).

Смонтируйте хост-машину /var/run/docker.sock в вашем контейнере

Как описано @ Герман Гарсия ответ:

docker run -p 8080:8080 --user root \
     -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean
1 голос
/ 08 марта 2019

Просто попробуйте выполнить ту же команду, но с sudo в начале

Например,

sudo docker images
sudo docker exec -it db4292380977 bash

Чтобы избежать использования sudo в будущем, вы должны запустить эту команду в Unix OS

sudo usermod -aG docker <your-user>

Изменение пользователя, которого вы используете в данный момент.Не забудьте выйти и снова войти, чтобы это вступило в силу!Для получения дополнительной информации об установке Docker нажмите здесь

1 голос
/ 08 марта 2019

Вам необходимо смонтировать локальный /var/run/docker.sock и запустить контейнер как root пользователь

ПРИМЕЧАНИЕ: это может быть недостаток безопасности, поэтому будьте осторожны, у кого есть доступ к jenkinsконтейнер

docker run -p 8080:8080 --user root \
     -v /var/run/docker.sock:/var/run/docker.sock jenkinsci/blueocean

вы сможете выполнить докер внутри контейнера

➜  ~  docker exec -it gracious_agnesi bash                                                                                              
bash-4.4# docker ps                                                                                                                     
CONTAINER ID        IMAGE                 COMMAND                  CREATED             STATUS              PORTS                        
       NAMES                                                                                                                            
c4dc85b0d88c        jenkinsci/blueocean   "/sbin/tini -- /usr/…"   18 seconds ago      Up 16 seconds       0.0.0.0:8080->8080/tcp, 50000
/tcp   gracious_agnesi
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...