我正在尝试配置我的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:
.env文件
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
但我不知道该改什么
2条答案
按热度按时间lzfw57am1#
由于您同时拥有
env_file:
和environment:
,因此env_file:
的文档说明:在environment节中声明的环境变量 * 覆盖 * 这些值-即使这些值为空或未定义,也是如此。
因此,当合成文件具有
$DB_HOST
的值 * 总是 *db
;.env
文件中的值将被忽略。在远程情况下,您尝试使用RDS凭据连接到合成数据库。由于您在两个
.env
文件中都声明了DB_HOST
,因此在docker-compose.yml
中不需要它,只需删除整个environment:
块即可。93ze6v8z2#
能否确认您能够连接到远程数据库?您可以通过
docker exec -it <container_name> /bin/bash
连接到正在运行的container,也可以通过docker run <container_name> -it /bin/bash
运行新container然后使用psql连接到您的DB,以验证您是否能够从那里连接
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>