从(jenkins)docker容器访问docker主机

时间:2015-08-19 15:16:23

标签: jenkins docker boot2docker

我需要从jenkins运行docker命令,它在docker上作为容器安装。我的本地设置在OSX上,我使用boot2docker来虚拟化docker机器。

我已经通过docker run -d -p 8080:8080 --name jenkins jenkins在docker上安装了jenkins并且运行正常。

在jenkins上我安装了#34; Docker插件" https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin需要DOCKER URL才能访问docker api。

当boot2docker启动时,我得到以下内容:DOCKER_HOST=tcp://192.168.59.103:2376,所以我假设docker api正在该主机/ por上运行?

在jenkins上我将DOCKER URL字段设置为http://192.168.59.103:2376但是我收到以下错误" shaded.org.apache.http.client.ClientProtocolException"。

似乎容器无法访问boot2docker docker服务器。也许我错过了一些东西,但我无法弄清楚我必须使用的正确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配置:

Docker configuration in jenkins

3 个答案:

答案 0 :(得分:1)

正如@ISanych建议你可以简单地做-v /var/run/docker.sock:/var/run/docker.sock,它也会神奇地在boot2docker上工作。无需定义DOCKER_URL

如果需要访问已启动容器的端口,您可能还会发现--net=host非常有用。

答案 1 :(得分:1)

我遇到了与Jenkins docker插件完全相同的问题。 Docker默认使用tls,但docker插件只支持http。我所做的是禁用docker机器上的TLS验证。我的docker机器是Ubuntu,因此docker conf文件位于/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'

答案 2 :(得分:-1)

这应该是对前一个答案的评论,但这似乎不可能。这只是一个注意提醒人们,监听0.0.0.0意味着监听任何可公共路由的接口可能连接到系统上配置的任何物理或虚拟网络接口。谨慎建议限制你只接触内部网络,不太可能遇到恶意的敌对势力。