Docker部署Kong网关需先启动PostgreSQL容器并挂载数据卷,再执行kong migrations bootstrap初始化数据库,最后以指定网络和环境变量启动Kong容器,通过Admin API验证后即可代理流量。

用 Docker 部署 Kong 网关非常高效,无需手动安装依赖、配置数据库或编译源码,一条命令就能拉起核心服务。关键在于理解 Kong 的运行依赖(PostgreSQL 或 Cassandra)和容器间网络协同。
准备基础依赖:启动 PostgreSQL 容器
Kong 默认需要外部数据库存储路由、插件、消费者等配置。推荐使用 PostgreSQL,Docker 中可一键启动:
- 运行 PostgreSQL 容器并暴露 5432 端口,设置数据库名、用户和密码
- 添加
--name kong-db方便后续容器通过名字连接 - 挂载数据卷保证重启后数据不丢失
示例命令:
docker run -d --name kong-db \-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
-v kong_db:/var/lib/postgresql/data \
-p 5432:5432 \
postgres:13
初始化 Kong 数据库并启动网关容器
Kong 容器首次启动前需执行数据库迁移(migrations),否则会报错无法启动。分两步操作:
- 先运行一次
kong migrations bootstrap初始化表结构 - 再以
start模式启动 Kong 主服务,连接刚才的 PostgreSQL - 使用
--network container:kong-db或自定义 bridge 网络确保互通
推荐创建专用网络提升稳定性:
docker run --rm --network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-db" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-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" \
kong:3.6 kong migrations bootstrap
docker run -d --name kong --network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-db" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
-e "KONG_PROXY_LISTEN=0.0.0.0:8000, 0.0.0.0:8443 ssl" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-v /path/to/kong-ssl:/usr/local/kong/ssl \
kong:3.6
验证与基础配置
服务启动后,立刻检查 Admin API 和 Proxy 是否就绪:
- 访问
http://localhost:8001应返回 JSON 格式的 Kong 节点信息 - 调用
curl -i http://localhost:8001/services查看空服务列表,确认管理接口可用 - 添加一个测试服务和路由,验证流量代理能力(例如代理 httpbin.org)
常用测试命令:
curl -i -X POST http://localhost:8001/services \--data "name=example-service" \
--data "url=https://httpbin.org"
curl -i -X POST http://localhost:8001/services/example-service/routes \
--data "paths[]=/test"
curl http://localhost:8000/test
进阶建议:使用 docker-compose 统一编排
生产或开发环境中,硬记多条命令易出错。用 docker-compose.yml 将数据库、Kong、甚至前端(如 Konga)统一管理更可靠:
- 定义两个 service:kong-db 和 kong,通过
networks共享网络 - 用
depends_on+ 自定义健康检查控制启动顺序 - 把环境变量、端口映射、SSL 证书挂载都集中声明,便于版本管理和复用
这样只需 docker-compose up -d 一条命令完成全部部署。











