2015-07-21 110 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

非常好,這解決了問題! 我的困惑源於這個事實,這在教程中沒有提到,否則它很精確。 –

相關問題