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

Docker Compose中Kong搭配PostgreSQL持续重启问题排查

问题原因分析

你的Kong容器持续重启的核心原因是错误地将一次性数据库初始化命令设为了容器的启动命令:

你在kong服务里配置了command: "kong migrations bootstrap",但kong migrations bootstrap是单次执行的操作——它仅用于初始化Kong的数据库表结构,执行完成后进程就会退出。而你同时设置了restart: always,容器每次退出后都会被Docker自动重启,重启后又重复执行bootstrap命令,此时数据库已经完成初始化,就会输出Database already bootstrapped,进程再次退出,陷入循环。

另外,你保留了KONG_DECLARATIVE_CONFIG环境变量,这是无数据库模式(DB-less)的专属配置项,在使用PostgreSQL时必须移除,否则会引发配置冲突。

修复步骤

1. 停止当前运行的容器

先停止并移除现有容器,终止循环重启:

docker-compose down

2. 修改docker-compose.yaml配置

调整kong服务和数据库服务的配置:

  • 移除kong服务的command: "kong migrations bootstrap",让Kong使用默认启动命令kong start
  • 移除kong服务的KONG_DECLARATIVE_CONFIG环境变量
  • 给PostgreSQL添加健康检查,确保数据库完全就绪后再启动Kong,避免启动时连接失败

修改后的完整配置如下:

version: '3.8'

networks:
 kong-net:
  driver: bridge

services: 

  kong-database:
    image: postgres:14
    restart: always
    networks:
      - kong-net
    environment:
      - POSTGRES_USER=kong
      - POSTGRES_PASSWORD=kong
      - POSTGRES_DB=kong
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U kong -d kong"]
      interval: 5s
      timeout: 5s
      retries: 5

  kong:
    image: kong:latest
    container_name: kong
    restart: always
    networks:
      - kong-net
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=kong-database
      - KONG_PG_PORT=5432
      - KONG_PG_USER=kong
      - KONG_PG_PASSWORD=kong
      - KONG_PG_DATABASE=kong
      - KONG_PROXY_ACCESS_LOG=/dev/stdout
      - KONG_ADMIN_ACCESS_LOG=/dev/stdout
      - KONG_PROXY_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_ERROR_LOG=/dev/stderr
      - KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl
    depends_on:
      kong-database:
        condition: service_healthy
    ports:
      - "8000:8000"
      - "8443:8443"
      - "127.0.0.1:8001:8001"
      - "127.0.0.1:8444:8444"

3. 启动服务

从日志看,数据库已经成功完成bootstrap,直接启动服务即可:

docker-compose up -d

如果后续需要升级Kong版本,再单独执行迁移命令(如kong migrations up和kong migrations finish),不要将迁移命令设为容器的启动命令。

额外说明
  • kong migrations bootstrap仅需执行一次,仅在首次初始化数据库时使用,日常启动Kong只需默认的kong start命令。
  • 数据库模式与无数据库模式(DB-less)不可同时启用,必须移除KONG_DECLARATIVE_CONFIG配置项。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 12:27:04