2017-06-04 33 views
1

[上下文:主機是使用Docker版本17.05.0-ce的AWS-EC2/Ubuntu 14.04.5。容器是從公開可用的回購圖像cbhihe/serf-alpine-bash構建的。集裝箱位於同一EC2實例和共享相同的默認橋接網絡以及實例的eth0接口。]「無法解析IP」;在加入dockerized serf代理時,bash腳本中的「查找錯誤」

這個問題的依據是answer到一個不同的問題。

兩個運行docker容器,每個容器用它直播serf代理工作,我想以從無人值守的bash腳本是一個雙節點集羣的農奴,其中兩個容器中運行在主機上執行。

對於集裝箱「DC2」私有IP 172.17.0.2加入另一個容器「DC1」一個農奴代理,我的劇本是這樣的:

docker run -d --name DC1 --rm cbhihe/serf-alpine-bash agent -node=NODE1 -iface=eth0 
docker run -d --name DC2 --rm cbhihe/serf-alpine-bash agent -node=NODE2 -iface=eth0 
docker exec -d DC2 serf join 172.17.0.2 

兩個第一線產生預期的結果,即2個運行容器。第三行似乎忽視:

  • 或者靜默,使用分離開關時,
  • 或與在沒有這種開關的下面的錯誤。

    錯誤加入集羣:1個錯誤發生: 無法解析172.17.0.2:查找172.17.0.2:無效的域名

無論哪種方式加入不會發生。
從控制檯執行完全相同的操作完美無瑕。

我看着導入主機的環境在我的腳本的bash shebang上下文中。不成功。指針是受歡迎的。 Tx

+1

也許一些依賴與殼?嘗試'docker exec DC2 bash -c'serf join 172.17.0.2'' – Robert

+0

@Robert,它在我的用例中正常工作:'docker exec「$ cont_id」bash -c'serf join'「$ join_IP」'你可以嗎讓它成爲一個答案,也許爲未來的讀者填充一個'bash -c'環境細節的簡短解釋?再次感謝你。 – Cbhihe

回答

1

從你的問題中的信息來看,我認爲shell可能存在依賴關係,它設置了環境變量。

嘗試執行由bash啓動的serf。這樣的事情:

docker exec "$cont_id" bash -c 'serf join '"$join_IP"