2016-01-22 81 views
3

這工作:使用泊塢窗環境變量命令

$ docker-compose run web psql -U dbuser -h db something_development 

docker-compose.yml文件有環境變量所有的地方。如果我運行docker-compose run web env,我會在這些關閉命令(腳本和一次性shell)中看到各種美味的東西。

docker-compose run env 
... 
DATABASE_USER=dbuser 
DATABASE_HOST=db 
DATABASE_NAME=something_development 
DB_ENV_POSTGRES_USER=dbuser 
... many more 

這是行不通的,因爲我目前的shell已經證明了這一點。

docker-compose run web psql -U ${DATABASE_USER} -h ${DATABASE_HOST} ${DATABASE_NAME} ``` PSQL:無法連接到服務器:沒有這樣的文件或目錄 是服務器本地運行和驗收Unix域套接字「/var/run/postgresql/.s.PGSQL 連接。 5432" ?這些環境變量來自像docker-compose.yml引用的.app.env這樣的env文件,但是docker-compose本身可以設置環境變量。當他們在那裏時甚至輸入dbuser似乎是一種恥辱。我嘗試了我的正常逃跑技巧。

docker-compose run web psql -U \$\{DATABASE_USER\} -h \$\{DATABASE_HOST\} \$\{DATABASE_NAME\} 
... many other attempts 

我完全橡膠鴨子所以我要回答我自己的問題。

回答

4

答案(可能有很多方法可以做到這一點)是使用-c運行bash,並使用單引號,以便本地shell不插入字符串。

docker-compose run web bash -c 'psql -U ${DATABASE_USER} \ -h ${DATABASE_HOST} ${DATABASE_NAME}'

太棒了。 docker-compose中的DRY shell命令。

1

概率不是你想要的答案,但我們設置的env瓦爾的方式......

(這是許多容器之一)

api: 
    image: 10.20.2.139:5000/investigation-api:${apiTag} 
    container_name: "api" 
    links: 
    - "database" 
    - "ldap" 
    ports: 
    - 8843:8843 
    environment: 
    KEYSTORE_PASSWORD: "ooooo" 
    KEYSTORE: "${MYVAR}" 
    volumes_from: 
    - certs:rw 

運行構成...

MYVAR=/etc/ssl/certs/keystoke.jks docker-compose (etcetera) 

通常上述行將在provision.sh腳本中 - 歡呼聲

+0

這是從主機傳遞一個env。我想要一種重用KEYSTORE_PASSWORD的方法:「ooooo」。看到我的答案,但謝謝! :) – squarism

+0

只是更新的答案 - 希望這對你有用:)只在我的例子中的一個地方使用它,但可以用於許多 – danday74

+0

嗯,這是方便的,無論。這是另一個靈活性選項。謝謝。 – squarism