使用docker-compose部署arm64v8/postgres时替换pg_hba.conf的方案咨询
实现方案
你可以直接通过docker-compose的绑定挂载功能映射本地pg_hba.conf到容器内目标路径,无需构建自定义镜像,容器重启后配置会永久生效,具体操作步骤如下:
步骤1:修改docker-compose.yml配置
在postgres服务的volumes配置段新增本地文件到容器的映射规则,修改后的完整配置如下:
version: '2' services: postgres: image: arm64v8/postgres:14.0-alpine volumes: - database:/var/lib/postgresql/data # 新增本行配置,末尾的ro表示只读挂载,避免容器内修改本地配置文件 - ./pg_hba.conf:/var/lib/postgresql/data/pg_hba.conf:ro ports: - 5432:5432 restart: unless-stopped environment: - POSTGRES_PASSWORD=xxx - POSTGRES_DB=xxx - POSTGRES_USER=xxx networks: - manager volumes: database: networks: manager: driver: bridge
步骤2:调整本地配置文件权限
PostgreSQL要求pg_hba.conf的所属用户ID为70(镜像内postgres用户的UID)、文件权限为600,否则会启动失败,在docker-compose.yml所在目录执行以下命令调整权限:
# 调整文件所属用户组 sudo chown 70:70 pg_hba.conf # 调整文件权限 sudo chmod 600 pg_hba.conf
步骤3:生效配置
在docker-compose.yml所在目录执行以下命令重启服务即可:
docker-compose up -d
如果你不想重启服务,也可以在修改本地pg_hba.conf后执行以下命令重载配置:
docker-compose exec postgres psql -U 你的POSTGRES_USER值 -c "SELECT pg_reload_conf();"
验证方法
执行以下命令查看容器内的配置文件,确认和本地文件内容一致即可:
docker-compose exec postgres cat /var/lib/postgresql/data/pg_hba.conf
内容的提问来源于stack exchange,提问作者Rainer Zufall
相关产品推荐
相关产品推荐

