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

自定义PostgreSQL镜像Docker Run未启动,手动Start正常原因咨询

自定义PostgreSQL镜像启动失败问题分析与解决

问题根源

官方PostgreSQL镜像的初始化入口脚本(entrypoint)需要以root权限完成一系列前置操作:比如设置数据目录的权限、初始化系统配置项,最终才切换到postgres用户启动数据库服务。

你的Dockerfile里提前执行了USER postgres,直接切换到非root用户运行容器,导致初始化脚本无法执行那些需要root权限的步骤,启动流程中途失败,容器直接退出,所以docker container ls看不到运行中的容器。

而手动执行docker start my-database时,第一次启动失败后,数据目录已经完成了部分初始化,后续启动不再需要走完整的初始化流程,因此能正常启动。

修复方案

删除Dockerfile中多余的USER postgres和WORKDIR /行,修改后的Dockerfile如下:

FROM postgres:11.9-alpine
COPY ddl/*.sql /docker-entrypoint-initdb.d/

重新构建并运行容器:

docker build -t my-postgres:1.0.0 -f Dockerfile .
docker run -d --name my-database \
           -e POSTGRES_PASSWORD=abc123 \
           -p 5432:5432 \
           my-postgres:1.0.0

额外说明

官方PostgreSQL镜像默认以root用户启动,入口脚本会自动完成权限配置和用户切换,完全不需要手动指定USER postgres,强行切换反而会破坏原有启动逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 20:48:20