Docker-compose postgresql 密码验证失败

has*_*bal 1 postgresql docker docker-compose

我正在尝试设置一个使用 postgres 数据库的网络服务。设置应该很简单,但我遇到了错误。因此,我要确保的第一件事是我设置的数据库确实存在并且正在运行。

为了测试这一点,我将“消费者”或“客户端”替换为 alpine 交互式 shell,如下所示:

version: '3'
services:

  db:
    image: postgres:10.1-alpine
    container_name: db
    expose:
      - 5432
    volumes:
      - "dbdata:/var/lib/postgresql/data"
    environment:
      - POSTGES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=db

  web:
    image: alpine:latest
    stdin_open: true
    tty: true
    entrypoint: /bin/sh
    depends_on:
      - db

volumes:
  dbdata:
Run Code Online (Sandbox Code Playgroud)

然后我运行以下命令进入交互式 shell:

docker-compose run web
Run Code Online (Sandbox Code Playgroud)

以及以下命令来获取数据库:

apk --update add postgresql-client && rm -rf /var/cache/apk/*

psql -h db -U user db
Run Code Online (Sandbox Code Playgroud)

我从 postgresql 得到了明确的拒绝:

psql: FATAL:  password authentication failed for user "user"
Run Code Online (Sandbox Code Playgroud)

我尝试的每个用户名/密码/数据库名组合都有相同的错误消息。没有多大帮助。

我在这里做错了什么?

lar*_*sks 5

您的docker-compose文件中有一个拼写错误。你POSTGRES这里拼错了:

POSTGES_USER=user
Run Code Online (Sandbox Code Playgroud)

这意味着user尚未创建用户。如果我纠正这个错字,那么我就有:

version: '3'
services:

  db:
    image: postgres:10.1-alpine
    expose:
      - 5432
    volumes:
      - "dbdata:/var/lib/postgresql/data"
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=pass
      - POSTGRES_DB=db

  web:
    image: alpine:latest
    stdin_open: true
    tty: true
    entrypoint: /bin/sh
    depends_on:
      - db

volumes:
  dbdata:
Run Code Online (Sandbox Code Playgroud)

启动环境:

docker-compose up -d
Run Code Online (Sandbox Code Playgroud)

连接到web包含的并安装 postgresql 客户端:

$ docker attach project_web_1
/ # apk add --update postgresql-client
Run Code Online (Sandbox Code Playgroud)

然后我就可以毫无问题地连接了:

/ # psql -h db -U user db
Password for user user:
psql (11.2, server 10.1)
Type "help" for help.

db=#
Run Code Online (Sandbox Code Playgroud)