postgresql Docker-Compose + postgres:数据库和用户创建不工作(不使用compose)

ny6fqffe  于 2024-01-07  发布在  PostgreSQL
关注(0)|答案(2)|浏览(202)

postgres Docker镜像的文档解释说,您可以使用环境变量使镜像在创建时创建用户和数据库。
我似乎无法使用docker-compose来完成这项工作:

# docker-compose.yml
services:
  postgresql:
    image: postgres:alpine
    environment:
      POSTGRES_DB: iotplatform
      POSTGRES_USER: iotplatform
      POSTGRES_PASSWORD: iotplatform

字符串
这是我的计划

docker-compose up -d --force-recreate postgresql
docker-compose exec postgresql psql -U iotplatform
# psql: FATAL:  role "iotplatform" does not exist


当我运行docker-compose exec postgresql env时,我看到的是配置好的环境变量。
日志上没说什么特别的

Attaching to iot-container-tracker_postgresql_1
postgresql_1  | 2018-12-17 17:35:05.754 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgresql_1  | 2018-12-17 17:35:05.754 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgresql_1  | 2018-12-17 17:35:05.757 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
postgresql_1  | 2018-12-17 17:35:05.770 UTC [21] LOG:  database system was shut down at 2018-12-17 17:35:03 UTC
postgresql_1  | 2018-12-17 17:35:05.772 UTC [1] LOG:  database system is ready to accept connections
postgresql_1  | 2018-12-17 17:35:22.639 UTC [34] FATAL:  role "iotplatform" does not exist

EDIT:在没有docker-compose的情况下尝试,它可以工作。

docker run --name some-postgres -e POSTGRES_PASSWORD=iotplatform -e POSTGRES_DB=iotplatform -e POSTGRES_USER=iotplatform -d postgres:alpine
docker exec -it some-postgres psql -U iotplatform
iotplatform=#


我错过了什么?

ogq8wdun

ogq8wdun1#

在运行downup后,它工作了。显然--force-recreate不是一个足够硬的重置。
感谢@StéphaneJeandeaux的帮助。

14ifxucb

14ifxucb2#

我怀疑你在分配你的POSTGRES_USER变量之前创建了你的postgres数据库,这意味着数据库首先是用默认用户('postgres')创建的。
要检查是否是这种情况,当您运行docker-compose up时,您将在日志中看到如下内容:

PostgreSQL Database directory appears to contain a database; Skipping initialization

字符串
因此,在这种情况下,您需要做的是删除附加到容器的卷。

docker-compose down --volumes


docker volume rm {volume_name}

相关问题