Docker以“信任”模式运行PostgreSQL

a9wyjsp7  于 2022-11-22  发布在  Docker
关注(0)|答案(2)|浏览(226)

我目前正在学习Docker,并尝试运行一个带有PostgreSQL数据库的Docker容器。我管理过一次,一切似乎都运行得很好。过了一段时间,我尝试运行另一个具有几乎相同设置的Docker容器,但是,它没有像预期的那样运行。我的问题是,现在,每当我尝试运行PostgreSQL容器时,initdb以“信任”模式初始化数据库,并接受任何不需要密码的连接。
到目前为止,我已经尝试从控制台运行命令:

docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -p 32000:5432 -d postgres:14.5-alpine

除了运行docker-compose.yaml之外:

services:
  db:
    container_name: Test_container
    image: postgres:14.5-alpine
    restart: unless-stopped
    ports:
      - "32000:5432"
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: mysecretpassword

此外,我尝试以不同的方式排序标签、不同的图像和不同的值,清理Docker:删除所有容器、映像和卷,甚至重新安装Docker,但是,每当我检查新创建的容器的日志时,我会得到:

sh: locale: not found
2022-08-16 09:35:50.709 UTC [30] WARNING:  no usable system locales were found
performing post-bootstrap initialization ... ok
initdb: warning: enabling "trust" authentication for local connections
You can change this by editing pg_hba.conf or using the option -A, or
--auth-local and --auth-host, the next time you run initdb.
syncing data to disk ... ok

我的一个假设是,由于某种原因,docker看不到我指定的密码,因此以“信任”模式启动数据库,但是,如果我添加

environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: test_db

添加到docker-compose.yaml,正在创建**test_db数据库。
如果有任何关于如何让docker运行PostgreSQL容器的建议,我将不胜感激,因为如果指定了密码,默认情况下它应该以“信任”模式运行。

胡安·冈萨雷斯指出:

注1:PostgreSQL映像在本地设置信任身份验证,因此您可能会注意到从本地主机(在同一容器内)连接时不需要密码。但是,如果从不同的主机/容器连接,则需要密码。
因此,根据文档,我更新了我的docker-compose.yaml文件:

environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres
      POSTGRES_DB: test_db
      POSTGRES_HOST_AUTH_METHOD: scram-sha-256
      POSTGRES_INITDB_ARGS: --auth-host=scram-sha-256

并再次尝试交换顺序和\或删除POSTGRES_INITDB_ARGS,但数据库仍以“trust”模式运行。

ztmd8pv5

ztmd8pv51#

如Postgres的DockerHub documentation中所述:
注1:PostgreSQL映像在本地设置信任身份验证,因此您可能会注意到从本地主机(在同一容器内)连接时不需要密码。但是,如果从不同的主机/容器连接,则需要密码。
但是,如果您不希望在本地连接中使用信任模式,您可以设置POSTGRES_HOST_AUTH_METHOD环境变量来覆盖此行为。

fnx2tebb

fnx2tebb2#

正如@jjanes在对我的问题的评论中指出的,解决方案是添加POSTGRES_INITDB_ARGS: --auth=scram-sha-256,它将设置本地和主机类型的连接。

相关问题