docker compose psql:错误:致命:角色“postgres”不存在

Jer*_*emy 16 postgresql docker docker-compose

当我尝试在本地 Ubuntu 计算机上对 docker-compose 文件使用 psql 命令时遇到问题: psql: error: FATAL: role "postgres" does not exist

我尝试使用其他解决方案,例如删除 docker 映像、卷。psql -U postgres对我也不起作用。

我先尝试使用docker-compose up,然后docker exec -it database bash

这是我的 docker-compose 文件

services:
  db:
    container_name: postgres
    image: postgres:13.3-alpine
    restart: always
    user: postgres
    environment:
      - POSTGRES_DB=postgres
      - POSTGRES_PASSWORD=postgres
      - POSTGRES_USER=root
    ports:
      - "5432:5432"
    volumes:
      - ./data/db:/var/lib/postgresql/data
Run Code Online (Sandbox Code Playgroud)

也许这个字符串能说明什么? postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization

输出:

Attaching to postgres
postgres | 
postgres | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres | 
postgres | 2021-08-02 17:29:10.426 UTC [1] LOG:  starting PostgreSQL 13.3 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
postgres | 2021-08-02 17:29:10.426 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres | 2021-08-02 17:29:10.426 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres | 2021-08-02 17:29:10.429 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgres | 2021-08-02 17:29:10.433 UTC [12] LOG:  database system was shut down at 2021-08-02 17:22:17 UTC
postgres | 2021-08-02 17:29:10.438 UTC [1] LOG:  database system is ready to accept connections
postgres | 2021-08-02 17:37:53.452 UTC [33] FATAL:  role "postgres" does not exist
postgres | 2021-08-02 17:37:56.958 UTC [35] FATAL:  role "user" does not exist
postgres | 2021-08-02 17:41:54.294 UTC [45] FATAL:  role "postgres" does not exist```
Run Code Online (Sandbox Code Playgroud)

小智 17

如果您使用“docker 卷”,您可能在另一个项目中使用相同的卷(至少我是),并且数据库已经存在。

重命名卷解决了我的问题:

volumes:
  volume_name:                                 # <- Rename "volume_name"
    name: volume_name                          # <- Rename "volume_name"

services:
  db:
    container_name: postgres
    image: postgres
    restart: always
    user: postgres
    environment:
      - POSTGRES_USER=pguser
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=postgres
    ports:
      - "5432:5432"
    volumes:
      - volume_name:/var/lib/postgresql/data    # <- Rename "volume_name"
Run Code Online (Sandbox Code Playgroud)


lar*_*sks 13

首先,您已设置POSTGRES_USERroot,因此您将拥有一个root用户而不是postgres用户。

其次,如果数据库已经存在,那么您设置什么并不重要POSTGRES_USER——postgresPOSTGRES_PASSWORD将使用数据库中的任何内容。

所以你可以:

  1. 删除数据库 ( rm -rf data/db) 并重新开始,或者
  2. 编辑你的pg_hba.conf,这样你就不需要密码了