必须修改 /etc/docker/daemon.json 配置国内镜像加速源并重启 Docker 服务,否则宝塔拉取 PostgreSQL 镜像仍直连 registry-1.docker.io 导致超时或极慢;验证需执行 docker info | grep -A 1 "Registry Mirrors" 确认生效。

宝塔面板里点“拉取镜像”卡在 pulling from registry-1.docker.io,不是宝塔的问题,是 Docker 守护进程根本没走国内加速源——必须改 /etc/docker/daemon.json,重启 docker 服务,否则再点一百次“拉取”都一样慢。
为什么宝塔里拉不到 PostgreSQL 镜像或特别慢
宝塔只是调用系统级 docker pull 命令,它不管理镜像源。你看到的“超时”“context deadline exceeded”“连接 registry-1.docker.io 失败”,说明 Docker 还在直连海外服务器。国内网络环境下,postgres:16 这类镜像有上百 MB,每层都要重试,实际就是配置没生效。
-
docker info | grep -A 1 "Registry Mirrors"没输出?说明配置白写了 - 宝塔界面点“Docker → 镜像管理 → 拉取”,背后就是
docker pull library/postgres:16,和你在终端敲一模一样 - 别碰
/www/server/panel/plugin/docker/下任何 JSON 文件,无效 - 填了
http://开头的地址?Docker 直接忽略,必须是https://
正确配置 Docker 国内镜像加速器(阿里云或中科大)
只改 /etc/docker/daemon.json,其他全是弯路。2026 年实测仍稳定可用的地址就两个:阿里云专属加速地址(推荐)、中科大源(备用)。多写几个反而拖慢拉取——Docker 是顺序尝试,一个失败就等超时才试下一个。
- 执行
sudo mkdir -p /etc/docker确保目录存在 - 用
sudo nano /etc/docker/daemon.json编辑,内容严格为:{"registry-mirrors": ["https://abc123.mirror.aliyuncs.com"]}(把abc123换成你阿里云控制台「容器镜像服务 → 镜像加速器」里给的真实地址) - 注意:必须是 JSON 数组
[],不能写成字符串;引号必须英文;末尾不能多逗号;所有标点必须英文 - 保存后立即执行:
sudo systemctl daemon-reload && sudo systemctl restart docker - 验证是否生效:
docker info | grep -A 1 "Registry Mirrors",输出里得有你填的域名
拉取 PostgreSQL 镜像时的关键避坑点
加速器配对了,但拉错标签照样白忙。生产环境禁止用 latest,也别信宝塔界面上显示的“已拉取”——它可能缓存了旧状态,要以命令行为准。
- 明确指定小版本号更稳,比如
postgres:16.4,比postgres:16更少意外升级 - 拉取时加
-v参数看真实过程:docker pull -v postgres:16.4,日志里出现docker.mirrors.ustc.edu.cn或你阿里云地址才算走加速源 - 如果仍看到
registry-1.docker.io,说明daemon.json没生效,或文件路径/权限错了(必须是root写入,且docker用户可读) - 轩辕镜像(
docker.xuanyuan.me)虽快,但非官方源,某些企业防火墙会拦截其域名,优先用阿里云或中科大
部署 PostgreSQL 容器时的网络与持久化要点
镜像拉下来只是第一步。PostgreSQL 默认监听 localhost,直接 docker run 启动后宝塔或外部程序连不上——必须暴露端口、挂载数据卷、设密码,三者缺一不可。
- 最简可用命令:
docker run -d \ --name pg16 \ -e POSTGRES_PASSWORD=mysecretpass \ -v /data/pg16:/var/lib/postgresql/data \ -p 5432:5432 \ --restart unless-stopped \ postgres:16.4
-
-v路径必须是宿主机绝对路径,且目录需提前chown 70:70 /data/pg16(PostgreSQL 容器内用户 UID/GID 是 70) - 别用
--net=host模式跑 PostgreSQL:它会和宿主机共用网络栈,宝塔面板的 Nginx、MySQL 可能端口冲突 - 密码必须通过
POSTGRES_PASSWORD环境变量传,不能写进命令行参数,否则历史记录里明文可见
配置 daemon.json 和验证 docker info 输出,这两步跳过就等于没配。很多人重启 Docker 后没验证,结果以为好了,其实还在原地爬行。


















