最近遇到一个坑:服务器重启后,DokPloy 服务启动不了,网页访问 3000 端口打不开。
经过 AI 的一步步指导,发现是 **数据库连接配置问题**,本文记录整个排查过程和解决方法。
提示词
我的服务器部署了 DokPloy ,暴露的 3000 端口,现在它打不开了,我已经进入服务器 ssh。
请给我一条命令,来查看问题原因,我给你执行命令的结果
注意:你不要给我一大堆内容,只需要给我一个命令即可
问题现象
- DokPloy 容器在 Docker 中显示正常运行:
docker ps
输出显示 DokPloy 服务正在运行,并且端口映射为 0.0.0.0:3000->3000/tcp。
- 访问网页时却打不开。
- 查看日志:
docker service logs dokploy --tail 50
日志中报错:
Main Server Error [Error: getaddrinfo ENOTFOUND dokploy-postgres]
提示无法找到 Postgres 主机。
排查步骤
1️⃣ 检查网络
首先确认 DokPloy 和 Postgres 在同一个 Docker 网络中:
docker service inspect dokploy-postgres --format '{{json .Spec.TaskTemplate.Networks}}'
docker service inspect dokploy --format '{{json .Spec.TaskTemplate.Networks}}'
输出显示两者都在同一个网络 ✅
2️⃣ 测试容器内部能否解析 Postgres
docker exec -it dokploy.1.c66vb5gpxwpid9yx1ugq9gxt3 sh -c "getent hosts dokploy-postgres"
输出:
10.0.1.5 dokploy-postgres
说明容器内部 DNS 能解析 Postgres 名称 ✅
3️⃣ 检查 DATABASE_URL 环境变量
docker exec -it dokploy.1.c66vb5gpxwpid9yx1ugq9gxt3 sh -c "echo $DATABASE_URL"
没有输出,说明 DokPloy 没有正确配置数据库连接。
4️⃣ 找回 Postgres 用户名和密码
docker exec -it dokploy-postgres.1.ejyezmvy6pbmj8kvkijab2ouq env | grep POSTGRES
输出:
POSTGRES_USER=dokploy
POSTGRES_DB=dokploy
POSTGRES_PASSWORD=xxxxxx
解决方法
把 DokPloy 的 DATABASE_URL 设置好,并重启服务:
docker service update dokploy \
--env-add DATABASE_URL="postgres://dokploy:amukds4wi9001583845717ad2@dokploy-postgres:5432/dokploy" \
--force
等待几秒钟,访问网页即可正常打开 3000 端口。
总结
-
问题根本原因:DokPloy 容器没有配置正确的数据库连接环境变量。
-
解决方法:
- 查 Postgres 用户名、密码、数据库名;
- 配置
DATABASE_URL; - 重启 DokPloy 服务。
-
提示:以后可以在 Docker Compose 或 DokPloy 自带环境变量管理里永久保存
DATABASE_URL,避免重启服务器再次出现问题。
🎯 经验教训
- 遇到 DokPloy 启动正常但网页打不开,第一步要先看 日志。
- PostgreSQL 连接问题是最常见的坑,记得检查
DATABASE_URL。 - Docker 网络和容器 DNS 检查是必备技能。