2015-12-28 68 views
4

使用Docker Compose將主服務和從服務連接在一起。從屬容器因此通過Compose自動注入包含連接到另一個主容器所需的各種端口和IP的環境變量。Docker Compose - 使用Container的命令環境變量

該服務通過命令行參數接受主設備的IP /端口,所以我將其設置在我的commands中。

master: 
    command: myservice 
    ports: 
    - '29015' 
slave: 
    command: myservice --master ${MASTER_PORT_29015_TCP_ADDR}:${MASTER_PORT_29015_TCP_PORT} 
    links: 
    - master:master 

的問題是,當撰寫命令運行,而不是從容器本身,他們實際上是設置內像MASTER_PORT_29015_TCP_PORT環境變量進行評估。

當啓動羣集 - 您看到這些警告:WARNING: The MASTER_PORT_29015_TCP_ADDR variable is not set. Defaulting to a blank string.

我試着設置entrypoint: ["/bin/sh", "-c"]但產生的異常行爲,其中的服務將不會看到任何變量都沒有。 (有關信息,我實際使用的服務是RethinkDB)。

回答

2

As stated in the documentation,鏈接環境變量現在不鼓勵,你應該只寫master而不是$MASTER_PORT_29015_TCP_ADDR。此外,似乎沒有要任何點寫$MASTER_PORT_29015_TCP_PORT當你知道它的價值將是29015.

因此,命令更改爲:

myservice --master master:29015 
+1

點上@jwodder。解決了主/從連接問題,但仍然很好解決環境變量的基礎用法,例如,可以給從屬設備命名,例如設置一個參數以使用容器主機名。 '--name $ {hostname}'仍然不起作用,例如,從服務器只生成隨機ID名稱,因此無法計算回其容器。 – simbolo

+0

@simbolo您是否曾嘗試在反引號中使用主機名 - 內容會在運行時進行評估,例如, '--name \'主機名\'' – Jurgen

相關問題