我正在尝试配置我的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>