【问题标题】:password authentication failed for user postgres using docker-compose使用 docker-compose 的用户 postgres 密码验证失败
【发布时间】:2022-11-29 00:50:11
【问题描述】:

我正在尝试使用数据库从节点 bash 向节点后端发出请求,所以首先我启动了这个 docker-compose:

version: '3.9'

services:
  backend:
    build: .
    ports:
       - '2000:2000'
  db:
    image: 'postgres'
    environment:
      POSTGRES_PASSWORD: '12345'
      POSTGRES_DB: 'attendancebd'

它运作良好。我只是在节点中创建一个 bash,当我像这样卷曲时:

curl backend:2000/info/teachers

它为我提供了数据库中的正确 JSON。

但是当我使用这个 docker compose 时:

version: '3.9'

services:
  server:
    build: .
    ports:
      - '5000:5000'
    networks:
      serveranddb:
        aliases:
          - server_host
      serverandbash:
        aliases:
          - server_host          
  db:
    image: 'postgres'
    environment:
      POSTGRES_PASSWORD: '12345'
      POSTGRES_DB: 'attendancebd'
    networks:
      serveranddb:
        aliases:
          - db_host          
  mybash:
    build: ./bash
    stdin_open: true
    tty: true
    networks:
      serverandbash:
        aliases:
          - bash_host    
networks:
  serveranddb:
    name: server_db
    driver: bridge
    ipam:
      driver: default
  serverandbash:
    name: server_bash
    driver: bridge
    ipam:
      driver: default     

我从 bash 做同样的卷曲:

curl server_host:2000/info/teachers

它向我发送消息:

{"message":"password authentication failed for user \"postgres\""}

而且环境是一样的,同样的密码,同样的数据库,为什么会这样呢?

【问题讨论】:

  • 查看数据库服务器日志文件

标签: postgresql docker docker-compose


【解决方案1】:

我找到了解决方案,我必须将 depends_on 放入服务器服务中,以便它等待数据库启动:

  server:
    build: .
    ports:
      - '5000:5000'
    networks:
      serveranddb:
        aliases:
          - server_host
      serverandbash:
        aliases:
          - server_host
    depends_on:
      - db 

【讨论】: