试图覆盖 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
我正在使用最新的 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