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

Docker化Kong并动态配置上游URL:Docker Compose YAML编写求助

完整Docker化Kong配置(含双上游服务示例)

我帮你完善了Docker Compose文件,不仅补全了Kong的基础配置,还添加了两个示例上游服务,方便你测试路由转发功能。以下是完整的配置内容:

version: "2"
services:
  postgres:
    image: postgres:9.4
    container_name: kong-database
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_USER=kong
      - POSTGRES_DB=kong
      - POSTGRES_PASSWORD=kong # 添加密码增强安全性,可选但推荐
    volumes:
      - kong-db-data:/var/lib/postgresql/data # 持久化数据库数据,避免容器重启丢失

  kong:
    image: kong:0.12-alpine
    container_name: kong
    depends_on:
      - postgres
    ports:
      - "8000:8000"    # HTTP代理端口,对外提供服务
      - "8443:8443"    # HTTPS代理端口
      - "8001:8001"    # Kong管理API端口,用于配置上游、路由等
      - "8444:8444"    # HTTPS管理API端口
    environment:
      - KONG_DATABASE=postgres
      - KONG_PG_HOST=postgres # 使用服务名连接数据库,比容器名更可靠
      - KONG_PG_USER=kong
      - KONG_PG_PASSWORD=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

  # 第一个上游服务示例:使用httpbin返回请求信息,方便测试
  upstream-service-1:
    image: mendhak/httpbin
    container_name: upstream-service-1
    ports:
      - "8081:80"

  # 第二个上游服务示例
  upstream-service-2:
    image: mendhak/httpbin
    container_name: upstream-service-2
    ports:
      - "8082:80"

volumes:
  kong-db-data:

配置说明

  • PostgreSQL服务:作为Kong的配置存储数据库,添加了密码和数据持久化卷,避免容器重启后数据丢失。
  • Kong服务:配置了数据库连接信息,暴露了必要的代理和管理端口,同时将日志输出到控制台方便调试。
  • 上游服务:用两个mendhak/httpbin容器作为示例上游,你可以替换成自己的业务服务镜像。

部署和配置步骤

  1. 启动所有容器

    docker-compose up -d
    
  2. 初始化Kong数据库
    容器启动后,需要先执行数据库迁移来初始化Kong的表结构:

    docker-compose exec kong kong migrations up
    
  3. 配置Kong上游和路由
    通过Kong的管理API(localhost:8001)来配置两个上游的转发规则:

    配置第一个上游(upstream-1)

    # 创建上游
    curl -X POST http://localhost:8001/upstreams --data "name=upstream-1"
    # 向上游添加目标(指向我们的upstream-service-1容器)
    curl -X POST http://localhost:8001/upstreams/upstream-1/targets --data "target=upstream-service-1:80"
    # 创建关联的服务
    curl -X POST http://localhost:8001/services --data "name=service-1" --data "url=http://upstream-1"
    # 创建路由,匹配路径/service1的请求转发到service-1
    curl -X POST http://localhost:8001/services/service-1/routes --data "paths[]=/service1"
    

    配置第二个上游(upstream-2)

    # 创建上游
    curl -X POST http://localhost:8001/upstreams --data "name=upstream-2"
    # 向上游添加目标
    curl -X POST http://localhost:8001/upstreams/upstream-2/targets --data "target=upstream-service-2:80"
    # 创建关联的服务
    curl -X POST http://localhost:8001/services --data "name=service-2" --data "url=http://upstream-2"
    # 创建路由,匹配路径/service2的请求转发到service-2
    curl -X POST http://localhost:8001/services/service-2/routes --data "paths[]=/service2"
    

测试验证

配置完成后,你可以通过以下地址测试转发效果:

  • 访问 http://localhost:8000/service1,会看到upstream-service-1返回的请求信息
  • 访问 http://localhost:8000/service2,会看到upstream-service-2返回的请求信息

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:20:35