You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

执行Docker Prune后PostgreSQL容器崩溃:找不到pg-qualstats文件

解决PostgreSQL Docker容器因pg-qualstats丢失崩溃的问题

错误原因

执行docker system prune后,手动安装在容器内部的pg-qualstats扩展文件被清理(未持久化到数据卷),但PostgreSQL配置文件postgresql.conf中仍保留了加载该扩展的配置,导致容器启动时找不到文件崩溃。

解决步骤

1. 临时启动容器,绕过扩展依赖

容器启动失败是因为shared_preload_libraries配置中包含pg-qualstats,先修改配置跳过加载:

  • 如果使用数据卷存储PostgreSQL数据,挂载数据卷到临时容器修改配置:
    docker run --rm -v [你的PG数据卷名称]:/var/lib/postgresql/data -it alpine vi /var/lib/postgresql/data/postgresql.conf
    
    找到shared_preload_libraries行,移除其中的pg-qualstats,保存退出。
  • 或者启动临时容器时覆盖配置参数:
    docker run --name temp-pg -e POSTGRES_PASSWORD=[你的密码] -d postgres:16.2 -c shared_preload_libraries=''
    

修改完成后,尝试启动原容器,此时应该能正常启动。

2. 重新安装pg-qualstats并持久化

为避免再次出现丢失问题,需将扩展文件持久化,推荐两种方式:

方式一:构建自定义PostgreSQL镜像(推荐)

创建Dockerfile:

FROM postgres:16.2

RUN apt-get update && apt-get install -y build-essential postgresql-server-dev-16 git \
    && git clone https://github.com/powa-team/pg_qualstats.git \
    && cd pg_qualstats && make && make install \
    && apt-get remove -y build-essential postgresql-server-dev-16 git \
    && apt-get autoremove -y && rm -rf /var/lib/apt/lists/* /pg_qualstats

构建镜像:

docker build -t postgres-16-pgqualstats .

之后使用该镜像启动容器,扩展会内置在镜像中,不会因容器清理丢失。

方式二:挂载宿主机目录存储扩展文件

  • 先找到PostgreSQL的扩展目录:
    进入正常运行的PostgreSQL容器,执行:
    pg_config --pkglibdir  # 输出类似 /usr/lib/postgresql/16/lib
    pg_config --sharedir   # 输出类似 /usr/share/postgresql/16
    
  • 在宿主机创建对应目录:
    mkdir -p ~/pg-extensions/lib ~/pg-extensions/share
    
  • 启动容器时挂载这两个目录:
    docker run -d \
      -v [你的PG数据卷名称]:/var/lib/postgresql/data \
      -v ~/pg-extensions/lib:/usr/lib/postgresql/16/lib \
      -v ~/pg-extensions/share:/usr/share/postgresql/16 \
      --name postgres-16 \
      -e POSTGRES_PASSWORD=[你的密码] \
      postgres:16.2
    
  • 进入容器安装扩展:
    docker exec -it postgres-16 bash
    apt-get update && apt-get install -y build-essential postgresql-server-dev-16 git
    git clone https://github.com/powa-team/pg_qualstats.git
    cd pg_qualstats && make && make install
    

3. 恢复扩展加载配置

容器正常运行后,修改postgresql.conf,将pg-qualstats重新加入shared_preload_libraries:

shared_preload_libraries = 'pg_qualstats'  # 若有其他扩展,用逗号分隔,如'pg_stat_statements,pg_qualstats'

重载配置或重启容器:

# 重载配置(无需重启容器)
docker exec -it postgres-16 psql -U postgres -c "SELECT pg_reload_conf();"
# 或重启容器
docker restart postgres-16

最后在需要的数据库中创建扩展(若之前已创建可跳过):

docker exec -it postgres-16 psql -U postgres -d [你的数据库名] -c "CREATE EXTENSION pg_qualstats;"

内容的提问来源于stack exchange,提问作者Jakub

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 11:43:21