Kong在Linux上需选对DB-less或PostgreSQL模式,否则kong start会静默失败或报500;DB-less要求kong.conf设database=off、KONG_DECLARATIVE_CONFIG为绝对路径、kong.yml含services和routes;PostgreSQL模式需确保pg_hba.conf允许md5认证、pg_host不填localhost、用户有CREATEDB权限,并检查内核ip_forward、防火墙及端口占用。

Kong 在 Linux 上能跑起来,但默认包管理器安装大概率失败;必须选对模式(DB-less 或 PostgreSQL),否则 kong start 会静默卡住或返回 500 错误。
DB-less 模式启动失败的常见原因
DB-less 模式适合测试、CI/CD 或单节点轻量代理,但它对配置极其敏感:
-
KONG_DATABASE=off必须显式写在kong.conf里,只设环境变量不生效 -
KONG_DECLARATIVE_CONFIG必须是绝对路径(如/etc/kong/kong.yml),./kong.yml或~/kong.yml全部被忽略 -
kong.yml至少得有services和routes块,空文件会导致启动后立即退出,日志只报no services found - 用 Docker 启动时,
-v挂载路径要和KONG_DECLARATIVE_CONFIG值完全一致,且容器内路径需可读(加:ro)
PostgreSQL 模式连不上数据库的硬伤点
生产环境推荐 PostgreSQL 模式,但初始化阶段最容易在底层连接上栽跟头:
-
pg_hba.conf必须允许md5认证,仅保留peer或ident会导致错误:failed to connect to database: FATAL: Peer authentication failed -
kong.conf中的pg_host别写localhost—— 它强制走 TCP loopback,而容器内更推荐用宿主机 IP 或 Docker 网络别名(如kong-database) -
kong migrations up失败前先确认三件事:pg_port、pg_user、pg_password全部填对,漏一个就卡在waiting for database - PostgreSQL 用户必须有
CREATEDB权限,否则kong migrations up报permission denied to create database
启动后 curl http://localhost:8001 返回 500 怎么查
这不是 Kong 配置问题,而是 Linux 内核或防火墙在拦截请求:
- 运行
sysctl net.ipv4.ip_forward,输出必须是net.ipv4.ip_forward = 1;值为 0 时,跨网段流量(比如容器访问宿主机服务)会在内核层直接丢弃 - Docker 默认加 iptables 规则,但若你手动清过规则或启用了
firewalld,可能拦住了8000(代理端口)或8001(Admin API);用iptables -L -n -t nat | grep 800查是否漏了转发链 - 检查
systemctl status kong日志,重点看有没有could not bind to address(端口被占)或permission denied(SELinux 或文件权限)
真正卡住的地方往往不在 Kong 本身,而在它依赖的那几行内核参数、一行 pg_hba.conf 配置、或一个被忽略的绝对路径——这些地方出错,Kong 不会明确告诉你“哪里错了”,只会沉默或甩个 500。

















