2016-02-12 260 views
0

從bash腳本運行docker命令有不同的結果

我使用socketplane/openvswitch泊塢窗圖像。 當我按照他們的指示在正在運行的容器中構建和執行OVS命令時,一切正常。但是,當我嘗試建立一個bash腳本運行和執行OVS命令與

db.sock: Database connection failed (Connection refused) 

容器返回實際的問題是運行以下命令在終端:

docker run -itd --cap-add NET_ADMIN [container-name] 
docker exec $cid ovs-vsctl show 

成功,但運行bash腳本中的相同命令不會。

這是我的bash腳本:

#!/bin/bash 
cid=$(docker run -itd --cap-add NET_ADMIN [container-name]) 
docker exec $cid ovs-vsctl show 

感謝

+0

如果沒有更多的細節,我們無法回答。至少要參考您所遵循的導致問題的指示。以及你正在運行那個錯誤的一系列命令。 – Sobrique

+0

[問]對於提出一個好問題是一個有用的參考點。想象一下,我試圖在我的系統上重現您的錯誤。我需要做什麼? – Sobrique

+0

對不起,修改了 – Daniel

回答

0

我的想法是你的問題的根源就在這裏:

docker run -itd 

因爲他們是矛盾的參數。

  • -d說'在後臺運行'。
  • -it說「交互運行,附上一個tty。

所以我建議你嘗試:

#!/bin/bash 
cid=$(docker run -d --cap-add NET_ADMIN [container-name]) 
docker exec $cid ovs-vsctl show 

做不到這一點,我的第二個猜測是 - 容器的啓動過程需要一些時間。我在啓動kibana容器時得到這個容器 - 啓動需要幾秒鐘,所以我得到'權限被拒絕'的錯誤。

嘗試在貼有「睡眠」,作爲一個簡單的測試,但如果是這樣的問題 - 你需要檢查數據庫啓動,看看你「得」。

如果做不到這一點,你可以在「附加」,您的容器交互,以docker exec -it <container> bash並運行命令,並直接排除故障。

+0

這個問題'sleep 3'做了這個工作。謝謝!你可能會發現有您可以檢查日誌條目 - – Daniel

+0

下一步可能會找出你怎麼能「檢測」打開的端口(我也是從「-itd」如你所說刪除「它」)。 – Sobrique

+0

感謝您提供非常有幫助的建議。 – Daniel