2017-05-26 59 views
2

到目前爲止我已經嘗試過所有的入口點和命令,我得到這個錯誤「沒有這樣的文件或目錄」。 我需要: 1)採用特殊的捲曲請求AWS 2)運行ETCD容器設置HOSTIP的環境變量,給它使用$ HOSTIP在ECS中運行一個etcd容器需要什麼入口點/命令?

看來,它需要一個字符串數組參數,但我不確定它是如何工作的。我想的命令是:

/bin/sh -c "export export HostIP=$(curl -s 169.254.169.254/latest/meta-data/local-ipv4)" 

etcd -advertise-client-urls http://${HostIP}:2379,http://${HostIP}:4001 
-other-similar-args... 

,但我需要改變他們是逗號分隔。

1)如何轉義逗號/引號? 2)我是否需要使用逗號併爲每個空間啓動一個新的字符串? 3)有沒有人有一個工作的例子???

更新:我做了一個自定義的容器包含此一entrypoint.sh:

#!/bin/sh export HOST=$(curl -s 169.254.169.254/latest/meta-data/local-hostname) export HostIP=$(curl -s 169.254.169.254/latest/meta-data/local-ipv4) 

/usr/local/bin/etcd -name etcd0 \ -advertise-client-urls 
http://${HostIP}:2379,http://${HostIP}:4001 \ -listen-client-urls 
http://0.0.0.0:2379,http://0.0.0.0:4001 \ 
-initial-advertise-peer-urls http://${HostIP}:2380 \ -listen-peer-urls http://0.0.0.0:2380 \ -initial-cluster-token etcd-cluster-1 \ -initial-cluster etcd0=http://${HostIP}:2380 \ 
-initial-cluster-state new 

現在的問題是,容器啓動,但本地主機使用,而不是0.0.0.0或與我們獲取IP來自AWS的捲曲。它似乎遭受某種錯誤,並回落到本地主機。

回答

0

從ECS儀表板命令行參數運行任務時,需要用逗號分隔,但請記住傳遞給sh -c的整個字符串是由子shell解釋的單個參數。

換句話說,你的任務定義應該如下所示:

/bin/sh,-c,export HostIP=$(curl -s 169.254.169.254/latest/meta-data/local-ipv4) && etcd ... 

但是,如果你控制了圖像,那麼你可以考慮寫一個自定義的入口點的腳本,它封裝了所有這一切。

+0

謝謝 - 我製作了自己的圖像,並將所有內容放入entrypoint.sh,然後將ECS入口點/命令留空。現在問題是圖像中出現了問題 - HostIP地址似乎回落到默認的127.0.0.1,而不是我通過它的那個。任何想法如何解決這個問題? –

+0

我需要看到你的'entrypoint.sh' –

+0

#!/ bin/sh export HOST = $(curl -s 169.254.169.254 /latest/meta-data/local-hostname) export HostIP = $(curl -s 169.254.169.254 /latest/meta-data/local-ipv4) /usr/local/bin/etcd -name etcd0 \ -advertise-client-url http:// $ {HostIP}:2379,http :// $ {HostIP}:4001 \ -listen-client-urls http://0.0.0.0:2379,http://0.0.0.0:4001 \ -initial-advertise-peer-urls http:// $ {HostIP}:2380 \ -listen-peer-urls http://0.0.0.0:2380 \ -initial-cluster-token etcd-cluster-1 \ -initial-cluster etcd0 = http:// $ { HostIP}:2380 \ -initial-cluster-state new –

相關問題