Доступ к хосту докера из докерского контейнера (jenkins)

Мне нужно запустить команды Docker от Jenkins, который установлен в качестве контейнера на Docker. Моя локальная установка на OSX, и я использую boot2docker для виртуализации докера.

Я установил Дженкинс на докер просто docker run -d -p 8080:8080 --name jenkins jenkins и работает нормально.

На jenkins я установил "Плагин Docker" https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin которому нужен URL-адрес DOCKER для доступа к API-интерфейсу докера.

Когда запускается boot2docker, я получаю следующее: DOCKER_HOST=tcp://192.168.59.103:2376, так что я предполагаю, что на этом хосте / порте работает docker api?

На Дженкинс я установил поле URL DOCKER как http://192.168.59.103:2376 но я получаю следующую ошибку "shaded.org.apache.http.client.ClientProtocolException".

Кажется, что контейнер не может получить доступ к Docker-серверу boot2docker. Может быть, я что-то упускаю, но я не могу понять, какой правильный IP / порт я должен использовать.

Обновление: Подробнее

This is what I get when I start boot2docker:

bash-3.2$ unset DYLD_LIBRARY_PATH ; unset LD_LIBRARY_PATH
bash-3.2$ mkdir -p ~/.boot2docker
bash-3.2$ if [ ! -f ~/.boot2docker/boot2docker.iso ]; then cp /usr/local/share/boot2docker/boot2docker.iso ~/.boot2docker/ ; fi
bash-3.2$ /usr/local/bin/boot2docker init 

  WARNING: The 'boot2docker' command line interface is officially deprecated.

  Please switch to Docker Machine (https://docs.docker.com/machine/) ASAP.

  Docker Toolbox (https://docker.com/toolbox) is the recommended install method.

Virtual machine boot2docker-vm already exists
bash-3.2$ /usr/local/bin/boot2docker up 

  WARNING: The 'boot2docker' command line interface is officially deprecated.

  Please switch to Docker Machine (https://docs.docker.com/machine/) ASAP.

  Docker Toolbox (https://docker.com/toolbox) is the recommended install method.

Waiting for VM and Docker daemon to start...
...............oooooooo
Started.
Writing /Users/local/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/local/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/local/.boot2docker/certs/boot2docker-vm/key.pem

To connect the Docker client to the Docker daemon, please set:
    export DOCKER_TLS_VERIFY=1
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/local/.boot2docker/certs/boot2docker-vm

Or run: `eval "$(boot2docker shellinit)"`

bash-3.2$ $(/usr/local/bin/boot2docker shellinit)
Writing /Users/local/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/local/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/local/.boot2docker/certs/boot2docker-vm/key.pem
bash-3.2$ docker version
Client:
 Version:      1.8.0
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   0d03096
 Built:        Tue Aug 11 17:17:40 UTC 2015
 OS/Arch:      darwin/amd64

Server:
 Version:      1.8.0
 API version:  1.20
 Go version:   go1.4.2
 Git commit:   0d03096
 Built:        Tue Aug 11 17:17:40 UTC 2015
 OS/Arch:      linux/amd64

Вот конфигурация jenkins для Облака:

Конфигурация докера в Дженкинсе

3 ответа

Как @ISanych предлагает, вы можете просто сделать -v /var/run/docker.sock:/var/run/docker.sock и он также будет волшебным образом работать на boot2docker. Нет необходимости определять DOCKER_URL,

Вы также можете найти --net=host полезно, если необходимо получить доступ к портам запущенных контейнеров.

Я столкнулся с точно такой же проблемой с моим плагином док-станции Jenkins. Docker по умолчанию использует tls, но подключаемый модуль docker поддерживает только http. Я отключил проверку TLS на док-машине. Моя докерская машина - Ubuntu, поэтому файл конфигурации докера находится под /etc/default/docker, Внутри файла conf вы можете отключить TLS, добавив

--tls=false 

в DOCKER_OPTS. Что-то вроде:

DOCKER_OPTS='-H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock --tls=false'

Вероятно, это должен быть комментарий к предыдущему ответу, но это не представляется возможным. Это всего лишь примечание, чтобы напомнить людям, что прослушивание 0.0.0.0 означает прослушивание любых публично маршрутизируемых интерфейсов, которые могут быть подключены к любому физическому или виртуальному сетевому интерфейсу, настроенному в вашей системе. Пруденс предлагает ограничить ваше воздействие только внутренней сетью, с меньшей вероятностью столкнуться с враждебными силами с злым умыслом.

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