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

使用PostgreSQL时Kong无法加载声明式配置实体的问题

问题原因与解决方案

1. 数据库模式下/services返回空数组的原因

当KONG_DATABASE=postgres时,Kong运行在数据库模式,此时KONG_DECLARATIVE_CONFIG配置会被直接忽略——声明式配置(DB-less模式)仅在KONG_DATABASE=off时生效。你的kong.yml配置并未加载到PostgreSQL中,数据库内无任何服务数据,因此调用/services接口返回空数组。

2. Kong与PostgreSQL结合声明式配置的可行性

Kong不支持同时启用数据库模式和DB-less模式,但可以通过将声明式配置导入到PostgreSQL的方式,把kong.yml作为数据库配置的初始化数据源,之后切换到数据库模式运行。本质是用声明式配置批量初始化数据库中的实体,而非同时运行两种配置模式。

3. 将kong.yml实体加载到PostgreSQL的步骤

第一步:修正kong.yml的配置错误

你的配置文件存在无效关联:routes下的basket-requests指定了service: basket_service,但services列表中未定义该服务,会导致导入失败。需先修正,示例如下:

routes:
  - name: basket-requests
    service: customer_service  # 改为已定义的服务,或添加basket_service的配置项
    paths:
      - /basket

第二步:导入配置到数据库

方式一:修改Docker Compose启动命令

调整Kong容器的command字段,在启动前执行配置导入:

bash -c "while !</dev/tcp/kong_postgresql/5432; do sleep 10; done; kong migrations bootstrap && kong config db_import /app/kong.yml && kong start"

该命令会先等待PostgreSQL就绪,执行数据库迁移,将kong.yml的配置导入到PostgreSQL,最后启动Kong。

方式二:手动导入(适用于已运行的环境)

进入Kong容器:

docker exec -it api_gateway bash

执行导入命令:

kong config db_import /app/kong.yml

导入完成后重启Kong即可。

第三步:优化环境变量(可选)

配置导入完成后,可移除KONG_DECLARATIVE_CONFIG环境变量,避免混淆,确保Kong完全依赖PostgreSQL存储配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 00:48:15