2015-07-21 112 views
0

我试图使用webhooks基于this tutorial的Docker中心自动部署。一个容器在端口80上运行web应用程序。在同一台主机上,我运行另一个容器,用于侦听来自Docker集线器的发布请求,从而触发主机更新webapp映像。 post请求会触发一个如下所示的bash脚本:使用容器内的bash脚本运行Docker命令

echo pulling... 
docker pull my_username/image 
docker stop img 
docker rm img 
docker run --name img -d -p 80:80 my_username/image 

测试有效内容成功触发脚本。但是,容器记录下列投诉:

pulling... 
app/deploy.sh: line 4: docker: command not found 
... 
app/deploy.sh: line 7: docker: command not found 

看来,bash脚本不会隐式访问主机。如何进行?

的东西,我试过,但没有奏效: 发射了听众容器时,我加入了主机IP这样的基础上,docs

HOSTIP=`ip -4 addr show scope global dev eth0 | grep inet | awk '{print\$2}' | cut -d/-f 1` 
docker run --name listener --add-host=docker:${HOSTIP} -e TOKEN="test654321" -d -p 5000:5000 mjhea0/docker-hook-listener 

同样,我取代与--add-host命令--add-host=dockerhost:$(ip route | awk '/docker0/ { print $NF }')根据this suggestion

回答

0

默认情况下,docker二进制文件和docker套接字都不会出现在容器中(为什么会这样?)。

您可以通过安装二进制和插座从主机当你开始e.g容器很容易解决这个问题:

$ docker run -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock debian docker --version 
Docker version 1.7.0, build 0baf609 

你似乎是有点困惑码头工人是如何工作的;我不确定“隐式访问主机”的意思,或者你认为它的工作原理。将容器想象成一个孤立且短暂的机器,与主机完全分离,就像一个快速虚拟机。

+0

非常好,这解决了问题! 我的困惑源于这个事实,这在教程中没有提到,否则它很精确。 –

相关问题