如何在docker-compose内部动态地将数据库从本地更改为外部



我正在尝试配置我的docker-compose文件,以便它根据.env文件中提供的凭据自动连接到正确的数据库。连接到本地数据库不会引起任何问题,但连接到远程数据库则不起作用。返回error port 5432 failed: FATAL: password authentication failed for user

docker-compose.yml
version: "3.9"
services:
panel:
env_file: .env
restart: always
build: .
ports:
- "8000:8000"
command: bash -c "python manage.py migrate && python manage.py runserver 0.0.0.0:8000"
volumes:
- .:/app
depends_on:
- db
environment:
- DB_HOST=db
db:
image: postgres:13
volumes:
- postgres_data:/var/lib/postgresql/data
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASSWORD}
- POSTGRES_DB=${DB_NAME}
- DB_HOST=${DB_HOST}
volumes:
postgres_data:

。文件/p>

DB_NAME=panel_db
DB_USER=db_root
DB_PASSWORD=i8sfsfdhisdu9sd8sjdis
DB_PORT=5432
DB_HOST=localhost
# remote
# DB_NAME=remote_panel_db
# DB_USER=gpanel
# DB_PASSWORD=yG8W5rxeggAasdffsdTolG
# DB_HOST=....rds.amazonaws.com
# DB_PORT=5432

在这个表格中,我连接到本地基地没有任何问题。

现在我试图取消注释远程数据库访问凭据

#DB_NAME=panel_db
#DB_USER=db_root
#DB_PASSWORD=i8sfsfdhisdu9sd8sjdis
#DB_PORT=5432
#DB_HOST=localhost
# remote
DB_NAME=remote_panel_db
DB_USER=gpanel
DB_PASSWORD=yG8W5rxeggAasdffsdTolG
DB_HOST=....rds.amazonaws.com
DB_PORT=5432

它不工作了。

我假设是

这行
environment:
- DB_HOST=db

但我不知道该改变什么

既然你有env_file:environment:,env_file:的文档说明:

环境部分中声明的环境变量覆盖这些值——即使这些值为空或未定义也适用。

所以当你的撰写文件有

env_file: .env
environment:
- DB_HOST=db

$DB_HOST的值总是db;.env文件中的值被忽略。在远程情况下,您正在尝试连接到撰写数据库,但使用您的RDS凭证。

由于您在两个.env文件中声明了DB_HOST,因此在docker-compose.yml中不需要它。只要删除整个environment:块。

能否确认是否可以连接到远程数据库?您可以通过docker exec -it <container_name> /bin/bash连接到正在运行的容器或通过docker run <container_name> -it /bin/bash运行新容器

,然后使用psql连接到您的数据库,以验证您能够从那里连接psql -h <hostname or ip address> -p <port number of remote machine> -d <database name which you want to connect> -U <username of the database server>

最新更新