试图覆盖 docker 中的 pg_hba.conf

Trying to override pg_hba.conf in docker

我正在使用最新的 Docker PostgreSQL 14.1 映像并尝试更改文件 pg_hba.conf 以使用 md5(开发机器):

# host all all all scram-sha-256
host all all all md5

我在本地有一个修改过的 pg_hba.conf 文件,我正在尝试使用。在我的 Docker 文件中,我执行以下操作:

RUN rm -f /var/lib/postgresql/data/pg_hba.conf
COPY ./postgresql/pg_hba.conf /var/lib/postgresql/data/pg_hba.conf

其中 ./postgresql/pg_hba.conf 是允许使用 md5

的修改版本

当我 运行 docker-compose 构建时,一切似乎都按预期工作。

Step 5/7 : RUN rm -f /var/lib/postgresql/data/pg_hba.conf
---> Using cache
---> 20e82128335a
Step 6/7 : COPY ./postgresql/pg_hba.conf /var/lib/postgresql/data/pg_hba.conf
---> Using cache
---> cc41cb9267d8
Step 7/7 : CMD ["tail", "-F", "-n0", "/etc/hosts"]
---> Using cache
---> 9cb31d31a1a3
Successfully built 9cb31d31a1a3
Successfully tagged fileshare_db:latest

目前,我没有运行连接数据库,只是使用以下命令,这样我就可以在不打开数据库的情况下保留容器,这样我就可以查看命令是否有效:

CMD ["tail", "-F", "-n0", "/etc/hosts"]
# CMD ["postgres"]

但是当我进入容器并在 pg_hba.conf 上执行 cat 命令时,它仍然具有旧设置

# TYPE  DATABASE        USER            ADDRESS                 METHOD
...
host    replication     all             127.0.0.1/32            trust
host    replication     all             ::1/128                 trust

host all all all scram-sha-256

这是我的 compose 文件的一部分,它特定于 postgresl

    db:
    container_name: db
    restart: always
    build:
        context: .
        dockerfile: ./Dockerfile.postgres
    ports:
        - "5432:5432"
    networks:
        - fileshare-network
    volumes:
        - db-data:/var/lib/postgresql/data
        - ../../backups/database:/var/backups

...
volumes:
    db-data:
        driver: "local"

更新 现在,我只是手动复制文件。我把它放在 /var/backups 中并覆盖 /var/lib/postgresql/data 中的文件,然后重新启动以使其工作。

积极的一面是我只需要做一次。

尝试改变你的Dockefile:

ENV POSTGRES_HOST_AUTH_METHOD=md5

docker-compose.yaml:

db:
  environment:
    POSTGRES_HOST_AUTH_METHOD: md5
    PGDATA=/var/lib/postgresql/data/pgdata

您可以删除这些行:

RUN rm -f /var/lib/postgresql/data/pg_hba.conf
COPY ./postgresql/pg_hba.conf /var/lib/postgresql/data/pg_hba.conf