You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么Docker Compose不遵循我配置的PostgreSQL不同登录凭证信息?

问题分析与解决方案

根因定位

  • 端口匹配错误:postgres-development服务映射本地5432端口到容器内5432端口,postgres-testing服务映射本地5433端口到容器内5432端口。你使用的连接URL指定了本地5432端口,所有请求实际进入postgres-development服务,只能使用该服务配置的jens1账号验证通过,jens2是postgres-testing服务的专属账号,自然无法在开发服务上验证成功。
  • YAML语法错误:配置中postgres-development下的environment、ports字段缩进比image多了一级,不符合YAML语法规范,会导致Docker Compose无法正确读取该服务的配置项。

修复步骤

  1. 修正连接地址
    要访问postgres-testing服务,将URL端口修改为5433即可,正确连接串为:
    postgresql://jens2:meindertsma2@localhost:5433/postgres-testing?schema=public
    如果是同一Docker Compose内的其他服务访问该数据库,可以直接用服务名作为主机名,不需要映射本地端口,连接串为:
    postgresql://jens2:meindertsma2@postgres-testing:5432/postgres-testing?schema=public

  2. 修正docker-compose.yml语法
    修正缩进后的完整配置如下:

services:
  postgres-development:
    image: "postgres:14"
    environment:
      - POSTGRES_USER=jens1
      - POSTGRES_PASSWORD=meindertsma1
      - POSTGRES_DB=postgres-development
    ports:
      - "5432:5432"
  postgres-testing:
    image: "postgres:14"
    environment:
      - POSTGRES_USER=jens2
      - POSTGRES_PASSWORD=meindertsma2
      - POSTGRES_DB=postgres-testing
    ports:
      - "5433:5432"
  1. 清理旧数据卷(可选,仅在配置修正后仍无法登录时执行)
    PostgreSQL仅在首次启动、数据卷为空时才会通过环境变量初始化账号和数据库,如果之前启动过配置错误的服务,旧数据卷会保留之前的账号配置,此时执行以下命令清理旧数据(注意:操作会删除所有已存的PostgreSQL数据,确认无需保留后执行):
    docker compose down -v
    之后重新启动服务即可:
    docker compose up -d

多服务环境变量配置说明

Docker Compose本身默认支持不同服务加载独立的环境变量,无需额外特殊配置,只需保证每个服务下的environment字段和image、ports等字段同级,缩进符合YAML规范即可,不同服务的环境变量互相隔离,不会互相影响。

内容的提问来源于stack exchange,提问作者Jens Meindertsma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 21:06:11