使用泊坞窗环境变量命令
问题描述:
这工作:使用泊坞窗环境变量命令
$ 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
我完全橡胶鸭子所以我要回答我自己的问题。
答
答案(可能有很多方法可以做到这一点)是使用-c
运行bash,并使用单引号,以便本地shell不插入字符串。
docker-compose run web bash -c 'psql -U ${DATABASE_USER} \ -h ${DATABASE_HOST} ${DATABASE_NAME}'
太棒了。 docker-compose中的DRY shell命令。
答
概率不是你想要的答案,但我们设置的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脚本中 - 欢呼声
这是从主机传递一个env。我想要一种重用KEYSTORE_PASSWORD的方法:“ooooo”。看到我的答案,但谢谢! :) – squarism
只是更新的答案 - 希望这对你有用:)只在我的例子中的一个地方使用它,但可以用于许多 – danday74
嗯,这是方便的,无论。这是另一个灵活性选项。谢谢。 – squarism