如何为Docker Postgres创建用户/数据库并从主机连接

时间:2018-02-12 10:44:42

标签: postgresql docker

我正在尝试在Docker容器中设置Postgres进行开发。有我的 Dockerfile

FROM postgres:10.2
ADD ./init-test-db.sql /docker-entrypoint-initdb.d/init-test-db.sql
ADD ./postgresql.conf /etc/postgresql/postgresql.conf
ADD ./pg_hba.conf /tmp/pg_hba.conf
ADD ./copy-conf.sh /docker-entrypoint-initdb.d/copy-conf.sh
EXPOSE 5432

我使用 init-test-db.sql 来创建数据库用户和数据库:

CREATE USER testUser WITH LOGIN PASSWORD 'testUserPsw';
CREATE DATABASE testdb;
GRANT ALL PRIVILEGES ON DATABASE testdb TO testUser;

我使用自己的 postgresql.conf 版本来确保设置 listen_addresses ='*' copy-conf.sh 用于将 pg_hba.conf 版本复制到容器内的Postgres:

#!/bin/bash
cp /tmp/pg_hba.conf /var/lib/postgresql/data/pg_hba.conf

我的 pg_hba.conf 在默认配置中添加一行:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

host    all             all             0.0.0.0/0               md5

构建我的泊坞窗图像的命令:

docker build -t postgres-test .

运行容器的命令:

docker run -p 5432:5432 --name testpg -e POSTGRES_PASSWORD=postgrespsw postgres-test

我希望能够使用本地计算机上的testUser登录Docker容器中的Postgres。我尝试在Postgres容器中看到错误消息:

[72] FATAL:  password authentication failed for user "testUser"
[72] DETAIL:  Role "testUser" does not exist.
    Connection matched pg_hba.conf line 83: "host    all             all             0.0.0.0/0               md5"

我可以使用 postgres 超级用户进行连接。所以似乎Postgres是可访问的。 testUser 有问题。

我试过这个SQL语句:

SELECT u.usename AS "User name",
       u.usesysid AS "User ID",
       CASE WHEN u.usesuper AND u.usecreatedb THEN CAST('superuser, create database' AS pg_catalog.text)
       WHEN u.usesuper THEN CAST('superuser' AS pg_catalog.text)
       WHEN u.usecreatedb THEN CAST('create database' AS
                                    pg_catalog.text)
       ELSE CAST('' AS pg_catalog.text)
       END AS "Attributes"
FROM pg_catalog.pg_user u
ORDER BY 1;

它表明testUser在那里。也许有人知道我的设置有什么问题?

0 个答案:

没有答案