2017-02-23 82 views
0

我的docker容器需要通過環境變量指定數據庫參數。在我的情況下,數據庫參數被傳遞到容器(使用Cloud Foundry)作爲一個json字符串的環境變量。將docker環境變量設置爲具有不同名稱的現有環境變量

我可以用這個命令來拉動所需的DB參數:

${echo $VCAP_SERVICES | jq -r '.dbaas[0].credentials.username'} 

但我怎麼將它們設置爲通過泊塢窗圖像所需的環境變量?直到容器啓動後,由Cloud Foundry傳入的環境變量纔可用。

+0

難道你看ARG dfirective,該文檔在這裏https://docs.docker.com/engine/ reference/builder /#/ arg – user2915097

+0

謝謝你的想法。是的,我確實研究過它。這似乎會影響在構建時傳遞的環境變量,所以我認爲在這種情況下它不會有幫助。 – byumark

+0

這是你自己建造的碼頭集裝箱嗎?或者你從Docker Hub使用? –

回答

0

你可以創建自己的包裝容器周圍的元數據庫容器,就像這樣:

FROM metabase/metabase 
ADD run.sh /usr/local/bin/run.sh 
RUN chmod +x /usr/local/bin/run.sh 
ENTRYPOINT /usr/local/bin/run.sh 

而且有一個看起來像一個run.sh腳本:

!#/bin/bash 

export DB_USERNAME=$(echo $VCAP_SERVICES | jq -r '.dbaas[0].credentials.username') 
# more vars here as needed... 

# Now call the original entrypoint 
/app/run_metabase.sh [email protected] 
0

斯科特·蘭金的回答是正確的。在我看到Scott的回答之前,我發現了另一種選擇。因爲我用的Cloud Foundry我能夠使用manifest.yml文件,如:

--- 
applications: 
- name: metabase 
    command: | 
    apk update && 
    apk add ca-certificates && 
    update-ca-certificates && 
    apk add openssl && 
    wget -O /tmp/jq-linux64 https://github.com/stedolan/jq/releases/download/jq-1.5/jq-linux64 && 
    chmod +x /tmp/jq-linux64 && 
    export MB_DB_HOST=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.host') && 
    export MB_DB_PORT=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.port') && 
    export MB_DB_DBNAME=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.database') && 
    export MB_DB_USER=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.username') && 
    export MB_DB_PASS=$(echo $VCAP_SERVICES | /tmp/jq-linux64 -r '.dbaas[0].credentials.password') && 
    exec /app/run_metabase.sh 
    env: 
    MB_DB_TYPE: mysql 
    memory: 2GB