使用容器内的bash脚本运行Docker命令
问题描述:
我试图使用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。
答
默认情况下,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
你似乎是有点困惑码头工人是如何工作的;我不确定“隐式访问主机”的意思,或者你认为它的工作原理。将容器想象成一个孤立且短暂的机器,与主机完全分离,就像一个快速虚拟机。
非常好,这解决了问题! 我的困惑源于这个事实,这在教程中没有提到,否则它很精确。 –