【AI 文】DokPloy 部署 3000 端口打不开?一招搞定!

111 阅读2分钟
最近遇到一个坑:服务器重启后,DokPloy 服务启动不了,网页访问 3000 端口打不开。
经过 AI 的一步步指导,发现是 **数据库连接配置问题**,本文记录整个排查过程和解决方法。

提示词

我的服务器部署了 DokPloy ,暴露的 3000 端口,现在它打不开了,我已经进入服务器 ssh。

请给我一条命令,来查看问题原因,我给你执行命令的结果

注意:你不要给我一大堆内容,只需要给我一个命令即可

问题现象

  1. DokPloy 容器在 Docker 中显示正常运行:
docker ps

输出显示 DokPloy 服务正在运行,并且端口映射为 0.0.0.0:3000->3000/tcp

  1. 访问网页时却打不开。
  2. 查看日志:
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 容器没有配置正确的数据库连接环境变量

  • 解决方法:

    1. 查 Postgres 用户名、密码、数据库名;
    2. 配置 DATABASE_URL
    3. 重启 DokPloy 服务。
  • 提示:以后可以在 Docker Compose 或 DokPloy 自带环境变量管理里永久保存 DATABASE_URL,避免重启服务器再次出现问题。


🎯 经验教训

  1. 遇到 DokPloy 启动正常但网页打不开,第一步要先看 日志
  2. PostgreSQL 连接问题是最常见的坑,记得检查 DATABASE_URL
  3. Docker 网络和容器 DNS 检查是必备技能。