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

使用Docker Compose启动Kong Gateway时出现Lua日志异常问题

Kong Gateway Docker Compose启动异常解决

问题描述

使用Docker Compose启动Kong Gateway容器时,出现以下日志:

[lua] globalpatches.lua:84: sleep(): executing a blocking 'sleep' (0.004 seconds), context: init_worker_by_lua*
[lua] globalpatches.lua:84: sleep(): executing a blocking 'sleep' (0.002 seconds), context: init_worker_by_lua*
[lua] globalpatches.lua:84: sleep(): executing a blocking 'sleep' (0.016 seconds), context: init_worker_by_lua*
[lua] globalpatches.lua:84: sleep(): executing a blocking 'sleep' (0.008 seconds), context: init_worker_by_lua*
[lua] warmup.lua:53: warming up DNS entries ..., context: ngx.timer
[lua] warmup.lua:87: finished warming up DNS entries' into the cache (in 39ms), context: ngx.timer;

原Docker Compose配置如下(存在语法与配置问题):

services:
  networks:
    backend:

  postgres:
     ....
     ....
     ....

  kong:
    image: kong/kong-gateway
    platform: linux/amd64
    environment:
      - KONG_DATABASE=postgres
      - 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"
      - KONG_PG_HOST=postgres
      - KONG_PG_USER=postgres
      - KONG_PG_PASSWORD=postgres
      - KONG_CASSANDRA_CONTACT_POINTS=postgres
    ports:
      - 8000:8000
      - 8001:8001
      - 8002:8002
      - 8443:8443
      - 8444:8444
    command:
      - kong
      - start
      - --vv
    restart: no
    networks:
      - backend

但直接使用docker run命令启动容器则无异常:

docker run \
   -d \
   --platform=linux/amd64 \
   --name kong \
   --network=test_backend \
   -e "KONG_DATABASE=postgres" \
   -e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
   -e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
   -e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
   -e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
   -e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
   -e "KONG_PG_HOST=postgres" \
   -e "KONG_PG_USER=postgres" \
   -e "KONG_PG_PASSWORD=postgres" \
   -e "KONG_CASSANDRA_CONTACT_POINTS=postgres" \
   -p 8000:8000 \
   -p 8001:8001 \
   -p 8002:8002 \
   -p 8443:8443 \
   -p 8444:8444 \
   kong/kong-gateway

已知Postgres容器运行正常,已手动创建kong数据库,通过docker run执行Kong迁移(kong bootstrap)也无问题。

解决方案

1. 修正Compose语法错误

原配置中networks被错误嵌套在services节点下,正确写法是networks与services同级。

2. 调整Kong启动命令

原配置指定kong start --vv跳过了镜像默认的初始化流程(含迁移检查),建议要么移除自定义command,使用镜像默认启动逻辑;要么先执行迁移再启动。

3. 修复环境变量引号问题

环境变量中的"是HTML转义字符,替换为普通双引号或直接去掉(值不含空格时)。

4. 移除冗余环境变量

因使用Postgres数据库,KONG_CASSANDRA_CONTACT_POINTS完全多余,直接删除。

修正后的Docker Compose示例

services:
  postgres:
    # 保留你的Postgres原有配置,示例如下
    image: postgres:15
    environment:
      - POSTGRES_DB=kong
      - POSTGRES_USER=postgres
      - POSTGRES_PASSWORD=postgres
    networks:
      - backend
    volumes:
      - postgres_data:/var/lib/postgresql/data

  kong:
    image: kong/kong-gateway
    platform: linux/amd64
    environment:
      - KONG_DATABASE=postgres
      - 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
      - KONG_PG_HOST=postgres
      - KONG_PG_USER=postgres
      - KONG_PG_PASSWORD=postgres
    ports:
      - 8000:8000
      - 8001:8001
      - 8002:8002
      - 8443:8443
      - 8444:8444
    restart: no
    networks:
      - backend
    # 若需手动控制迁移,可启用以下command
    # command: sh -c "kong bootstrap && kong start --vv"
    depends_on:
      - postgres

networks:
  backend:

volumes:
  postgres_data:

额外说明

  • 添加depends_on确保Kong在Postgres启动后再启动(仅保证启动顺序,生产环境建议添加Postgres健康检查以确保服务就绪)
  • 若坚持使用kong start --vv,必须先执行kong bootstrap完成数据库初始化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 04:42:33