运行 Docker 容器内带有 bash 脚本的命令
Running Docker Commands with a bash script inside a container
我正在尝试使用 Webhook 自动部署到基于 this tutorial 的 Docker 集线器。一个容器 运行 是端口 80 上的 Web 应用程序。在同一台主机上,我 运行 另一个容器侦听来自 docker 集线器的 post 请求,触发主机更新网络应用图像。 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:
添加了这样的主机 IP
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
同样,我根据 this suggestion.
将 --add-host 命令替换为 --add-host=dockerhost:$(ip route | awk '/docker0/ { print $NF }')
默认情况下,docker 二进制文件和 docker 套接字都不会出现在容器中(为什么会这样?)。
您可以通过在启动容器时从主机安装二进制文件和套接字来相当容易地解决这个问题,例如:
$ 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 的工作原理有点困惑;我不确定 "access the host implicitly" 的确切含义或您认为它会如何工作。将容器想象成一个孤立的、短暂的机器,完全独立于你的主机,就像一个快速的虚拟机。
我正在尝试使用 Webhook 自动部署到基于 this tutorial 的 Docker 集线器。一个容器 运行 是端口 80 上的 Web 应用程序。在同一台主机上,我 运行 另一个容器侦听来自 docker 集线器的 post 请求,触发主机更新网络应用图像。 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 命令替换为--add-host=dockerhost:$(ip route | awk '/docker0/ { print $NF }')
默认情况下,docker 二进制文件和 docker 套接字都不会出现在容器中(为什么会这样?)。
您可以通过在启动容器时从主机安装二进制文件和套接字来相当容易地解决这个问题,例如:
$ 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 的工作原理有点困惑;我不确定 "access the host implicitly" 的确切含义或您认为它会如何工作。将容器想象成一个孤立的、短暂的机器,完全独立于你的主机,就像一个快速的虚拟机。