我正在尝试使用基于this tutorial的webhooks自动部署到Docker中心。一个容器在端口80上运行Web应用程序。在同一主机上,我运行另一个容器,该容器侦听来自docker hub的post请求,触发主机更新webapp映像。 post请求会触发一个如下所示的bash脚本:
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脚本没有隐式访问主机。怎么办?
东西我试过但没有用: 在启动监听器容器时,我根据docs:
添加了这样的主机IPHOSTIP=`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
同样,我基于this suggestion用--add-host=dockerhost:$(ip route | awk '/docker0/ { print $NF }')
替换了--add-host命令。
答案 0 :(得分:0)
默认情况下,docker二进制文件和docker socket都不会出现在容器中(为什么会这样?)。
您可以通过在启动容器时从主机安装二进制文件和套接字来轻松解决此问题,例如:
$ 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
你似乎对Docker的工作方式感到有些困惑;我不确定你的意思是“隐式访问主机”或者你认为它会起作用。将容器视为一个孤立的短暂机器,与主机完全分离,就像快速VM一样。