从(jenkins)docker集装箱访问docker主机

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

我已经在docker上安装jenkins docker run -d -p 8080:8080 --name jenkins jenkins ,它运行良好。

在jenkins我已经安装了“Docker插件” https://wiki.jenkins-ci.org/display/JENKINS/Docker+Plugin需要DOCKER URL才能访问docker api。

当boot2docker启动时,我得到以下: DOCKER_HOST=tcp://192.168.59.103:2376 ,所以我认为dockerAPI是运行在该主机/ 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 

这里是云的jenkinsconfiguration:

在jenkins中的Docker配置

正如@ISanychbuild议你可以简单地执行-v /var/run/docker.sock:/var/run/docker.sock ,它也会在boot2docker中神奇地工作。 不需要定义DOCKER_URL

如果需要访问启动的容器的端口,你也可以find--net=host

我遇到了与Jenkins docker插件完全相同的问题。 Docker默认使用tls,但是docker插件只支持http。 我所做的是在泊坞窗机器上禁用TLSvalidation。 我的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' 

这可能应该是对上一个答案的评论,但这似乎不可能。 这只是提醒大家,在0.0.0.0上监听意味着监听任何可公开路由的接口可能连接到系统上configuration的任何物理或虚拟networking接口。 谨慎的build议是把你的暴露限制在一个内部networking,不太可能会遇到敌对的敌人。