我有一个docker-compose文件,该文件具有运行postgres数据库映像的服务。数据库的环境变量(用户,密码,db_name)位于名为db.env
的环境文件中:
DB_USERNAME=some_user
DB_PASSWORD=thepassword
DB_NAME=database
因为我只想在一个文件中拥有这些变量,所以我想使用此backand/db.env
文件。问题在于,环境变量名称与postgres使用的名称不同(DB_USERNAME <=> POSTGRES_USER)。
这是docker-compose.yml
文件:
services:
db:
image: postgres
ports:
- 5432:5432
env_file:
- backend/db.env
environment:
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_USER=${DB_TEST}
- POSTGRES_DB=${DB_DATABASE}
我尝试使用与使用标准.env
文件相同的方法:Environment variables in Compose。
答案 0 :(得分:1)
env_file
将位于组合文件本身的容器.env
中,因此您需要在此处使用.env
解决方法:
for i in $(cat < db.env); do export $i;done && docker-compose up -d
db.env:
DB_USERNAME=some_user
DB_PASSWORD=thepassword
DB_NAME=database
答案 1 :(得分:1)
为什么在db.env中定义后再次定义环境变量?您可以使用相同的db.env
。只需根据Postgres环境变量名称在db.env中设置环境变量名称,就可以优化here。
db.env
POSTGRES_PASSWORD=pass
POSTGRES_USER=user
POSTGRES_DB=db
和Docker组成
services:
db:
image: postgres
ports:
- 3306:3306
env_file:
- db.env
docker-compose up
,然后尝试验证数据库和用户
docker exec -it <container_id> bash -c "psql -U user -l"
输出
docker-user$ docker exec -it postgress-env_db_1 bash -c "psql -U user -l"
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+----------+------------+------------+-------------------
db | user | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | user | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | user | UTF8 | en_US.utf8 | en_US.utf8 | =c/user +
| | | | | user=CTc/user
template1 | user | UTF8 | en_US.utf8 | en_US.utf8 | =c/user +
| | | | | user=CTc/user
(4 rows)
或者如果您想要相同的环境,则可以通过
(export $(cat db.env | xargs) && docker-compose up )