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

Docker部署PostgreSQL导入数据后容器停止,如何使其持续运行?

解决PostgreSQL容器导入数据后停止的问题

问题分析

容器在数据导入完成后停止,核心原因通常有两个:

  • 初始化脚本未处理重复执行场景(比如容器重启时),createdb命令因数据库已存在报错,触发set -e终止流程
  • PGDATA目录权限不符合PostgreSQL运行要求,导致主进程启动失败

修复步骤

1. 修改初始化脚本,避免重复创建数据库

更新entrypoint2.sh,先判断目标数据库是否存在,仅在不存在时执行创建操作,避免报错终止流程:

#!/bin/bash
set -e

# 检查opr数据库是否存在,不存在则创建
psql -U postgres -tc "SELECT 1 FROM pg_database WHERE datname = 'opr'" | grep -q 1 || createdb opr

# 导入备份数据
pg_restore -U postgres -d opr /opr.dump

2. 完善Dockerfile配置

添加目录权限设置和脚本可执行权限配置,确保PostgreSQL进程能正常运行:

FROM postgres:14.10

# 设置环境变量
ENV PGDATA=/var/pgdata
ENV POSTGRES_USER=postgres
ENV POSTGRES_PASSWORD=admin
ENV POSTGRES_HOST_AUTH_METHOD=trust

# 创建PGDATA目录并设置正确权限
RUN mkdir -p /var/pgdata && chown -R postgres:postgres /var/pgdata

# 复制备份文件和初始化脚本
COPY opr.dump /opr.dump
COPY entrypoint2.sh /docker-entrypoint-initdb.d/entrypoint2.sh

# 赋予初始化脚本执行权限
RUN chmod +x /docker-entrypoint-initdb.d/entrypoint2.sh

ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["postgres"]

3. 验证容器运行

构建镜像并启动容器:

docker build -t postgres-opr .
docker run -d --name postgres-opr-container postgres-opr

通过日志确认PostgreSQL主进程正常启动:

docker logs postgres-opr-container

正常启动会出现类似日志:

...
PostgreSQL init process complete; ready for start up.

202X-XX-XX XX:XX:XX.XXX UTC [1] LOG:  starting PostgreSQL 14.10 on x86_64-pc-linux-gnu, compiled by gcc (Debian 10.2.1-6) 10.2.1 20210110, 64-bit
202X-XX-XX XX:XX:XX.XXX UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
202X-XX-XX XX:XX:XX.XXX UTC [1] LOG:  listening on IPv6 address "::", port 5432
202X-XX-XX XX:XX:XX.XXX UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
202X-XX-XX XX:XX:XX.XXX UTC [1] LOG:  database system is ready to accept connections

关键原理

PostgreSQL官方镜像的docker-entrypoint.sh会在首次初始化时执行docker-entrypoint-initdb.d目录下的脚本,执行完成后自动启动PostgreSQL主进程。如果初始化脚本报错终止,或者主进程因权限问题无法启动,容器就会停止运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 22:36:31