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

svmlkihl  于 2022-12-18  发布在  Docker
关注(0)|答案(2)|浏览(116)

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

但我不知道该改什么

lzfw57am

lzfw57am1#

由于您同时拥有env_file:environment:,因此env_file:的文档说明:
在environment节中声明的环境变量 * 覆盖 * 这些值-即使这些值为空或未定义,也是如此。
因此,当合成文件具有

env_file: .env
environment:
  - DB_HOST=db

$DB_HOST的值 * 总是 * db; .env文件中的值将被忽略。在远程情况下,您尝试使用RDS凭据连接到合成数据库。
由于您在两个.env文件中都声明了DB_HOST,因此在docker-compose.yml中不需要它,只需删除整个environment:块即可。

93ze6v8z

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>

相关问题