2014-11-04 61 views
3

我試圖從碼頭運行命令通過超級用戶varibale,以便它可以執行帶有變量值的腳本。我們需要在運行時進行設置,以便每個開發人員都可以在rabbitmq中擁有自己的隊列,這樣我們就不會在測試期間破壞其他隊列。如何從碼頭運行命令通過超級用戶環境變量

泊塢窗運行命令:

docker run -i -p 5672:5672 -p 9200:9200 -p 9300:9300 -p 9001:9001 -p 15672:15672 -e "PARENT_HOSTNAME=MACHINED58" --rm --name shovel -t dtwill/blkmesa:shovel 

泊塢窗CMD聲明(看文檔後,我知道爲什麼錯誤發生不能提供arbritrary PARM http://supervisord.org/running.html):

CMD /usr/bin/supervisord 

監事配置:

[program:update_rabbit_config] 
    command=/src/update_rabbit_config.sh 
    redirect_stderr=true 
    priority=200 
    startsecs=3 

腳本主管運行:

machineName=$PARENT_HOSTNAME 
    echo machine name = $machineName 
    sed -i .bak "s/|machine|/'$machineName'/" /etc/rabbitmq/rabbitmq.config 

這是錯誤:

INFO exited: update_rabbit_config (exit status 1; not expected) 

...因此,如果有人知道如何做到這一點,我會非常感激,並會做一個快樂的舞蹈,當我茅塞頓開。

謝謝!

[已更新]我更新了相關部分以使用答案中的建議。當然我也會包括腳本的結果,當我手動運行它(使用nsenter後連接到運行容器):

[email protected]:/src# bash update_rabbit_config.sh 
    machine name = 
    sed: -e expression #1, char 1: unknown command: `.' 

貌似環境變量不是在上下文。

回答

3

我不是爲上司的專家,但在documentation據說:

Note that the subprocess will inherit the environment variables of the shell used to start 「supervisord」 except for the ones overridden here (environment). See Subprocess Environment .

從我的理解,你應該從管理者配置刪除environment=PARENT_HOSTNAME=%(PARENT_HOSTNAME)s


您的sed命令也存在問題。因爲你使用單引號'變量替換不會發生。嘗試改爲:

echo machine name = $PARENT_HOSTNAME 
sed -i .bak "s/|machine|/$PARENT_HOSTNAME/" /etc/rabbitmq/rabbitmq.config 
+0

是的,碼頭運行中的-e設置環境變量。只要使用'時間。 – user2105103 2014-11-04 22:10:49

+0

謝謝@Thomasleveil。我嘗試過,但是當這個子進程運行時我仍然收到錯誤。 – 2014-11-06 14:57:14

+0

您是否從'CMD/usr/bin/supervisord $ PARENT_HOSTNAME'中刪除了'$ PARENT_HOSTNAME'?您需要這樣做,因爲PARENT_HOSTNAME將從環境變量中讀取,而不是從supervisord參數中讀取。 – Thomasleveil 2014-11-06 15:00:04

相關問題