当我尝试在本地 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
也许这个字符串说明了什么?
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```
如果您使用“dockervolumes”,您可能在另一个项目中使用相同的卷(至少我是),并且数据库已经存在。
重命名卷解决了我的问题:
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"
首先,您已将
POSTGRES_USER
设置为 root
,因此您将拥有 root
用户而不是 postgres
用户。
其次,如果数据库已经存在,那么您为
POSTGRES_USER
和 POSTGRES_PASSWORD
设置什么并不重要——postgres 将使用数据库中的任何内容。
所以你可以:
rm -rf data/db
) 并重新开始,或者pg_hba.conf
,这样您就不需要密码大家好。我长期以来一直在寻找解决方案。设置 .env 对我有帮助,在我在 docker-compose 中指定变量后,删除了项目中的 docker 文件夹,然后删除了所有容器并开始构建它。我希望这对某人有帮助
docker-compose exec web rake db:migrate db:create
- 我有上述错误:角色“...”不存在。
当我尝试时:
docker-compose exec web rake db:drop
docker-compose exec web rake db:setup
它正在工作。