macos搭建kong 7 days ago
博客大纲
在 macOS 上使用 Docker 搭建 Kong 并访问管理界面
要在 macOS 上使用 Docker 搭建 Kong 并访问其管理界面(Kong Manager 或 Konga),可以按照以下步骤操作:
方法一:使用官方 Docker 镜像(仅 Kong API 网关)
安装 Docker Desktop for Mac:
- 从 Docker 官网 下载并安装
创建 Docker 网络:
docker network create kong-net
- 启动 PostgreSQL 数据库:
docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_PASSWORD=kong" \
postgres:13
- 初始化 Kong 数据库:
docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \
kong:latest kong migrations bootstrap
- 启动 Kong:
docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-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" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest
- 验证安装:
curl -i http://localhost:8001/
方法二:使用 Kong 企业版(包含 Kong Manager)
如果你需要官方 UI(Kong Manager),需要使用 Kong 企业版:
获取 Kong 企业版镜像:
- 需要从 Kong 官网获取企业版 Docker 镜像(需要许可证)
启动命令示例:
docker run -d --name kong-ee \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-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_ADMIN_GUI_URL=http://localhost:8002" \
-e "KONG_ADMIN_GUI_LISTEN=0.0.0.0:8002" \
-e "KONG_PORTAL_GUI_LISTEN=0.0.0.0:8003" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
-p 8002:8002 \
-p 8003:8003 \
kong-ee:latest
方法三:使用 Konga(第三方管理界面)
如果你不想使用企业版,可以安装 Konga(开源管理界面):
- 启动 PostgreSQL(如果尚未启动):
docker run -d --name konga-database \
--network=kong-net \
-p 5433:5432 \
-e "POSTGRES_USER=konga" \
-e "POSTGRES_DB=konga" \
-e "POSTGRES_PASSWORD=konga" \
postgres:13
- 初始化 Konga 数据库:
docker run --rm \
--network=kong-net \
pantsel/konga:latest -c prepare -a postgres -u postgres://konga:konga@konga-database:5432/konga
- 启动 Konga:
docker run -d -p 1337:1337 \
--network=kong-net \
-e "DB_ADAPTER=postgres" \
-e "DB_URI=postgres://konga:konga@konga-database:5432/konga" \
-e "KONGA_HOOK_TIMEOUT=120000" \
-e "NODE_ENV=production" \
--name konga \
pantsel/konga:latest
访问 Konga:
- 打开浏览器访问
http://localhost:1337
- 首次访问需要注册管理员账户
- 登录后配置 Kong 管理 API 地址(通常是
http://kong:8001
或http://localhost:8001
)
- 打开浏览器访问
访问管理界面
- Kong Admin API:
http://localhost:8001
- Kong Manager(企业版):
http://localhost:8002
- Konga(第三方):
http://localhost:1337
注意:企业版功能需要有效的 Kong 企业许可证。对于大多数开发和个人使用场景,Konga 是一个不错的开源替代方案。
ISSUE
按照上述方法搭建kong报错了
$ docker run --rm \
--network=kong-net \
pantsel/konga:latest -c prepare -a postgres -u postgres://konga:konga@konga-database:5432/konga
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
debug: Preparing database...
Using postgres DB Adapter.
Database exists. Continue...
error: A hook (`orm`) failed to load!
error: Failed to prepare database: error: column r.consrc does not exist
at Connection.parseE (/app/node_modules/sails-postgresql/node_modules/pg/lib/connection.js:539:11)
at Connection.parseMessage (/app/node_modules/sails-postgresql/node_modules/pg/lib/connection.js:366:17)
at Socket.<anonymous> (/app/node_modules/sails-postgresql/node_modules/pg/lib/connection.js:105:22)
at Socket.emit (events.js:310:20)
at Socket.EventEmitter.emit (domain.js:482:12)
at addChunk (_stream_readable.js:286:12)
at readableAddChunk (_stream_readable.js:268:9)
at Socket.Readable.push (_stream_readable.js:209:10)
at TCP.onStreamRead (internal/stream_base_commons.js:186:23)
原因是我的macbook是m1的芯片
使用下面3个方法之一就可以解决
这个错误是因为你使用的是 ARM64 架构的 Mac(如 M1/M2 芯片),而 Konga 的 Docker 镜像目前只支持 linux/amd64
平台。此外,PostgreSQL 版本也可能导致兼容性问题。
解决方案
方法 1:指定平台并使用兼容的 PostgreSQL 版本
删除现有容器(如果存在):
docker rm -f konga-database
- 重新启动 PostgreSQL 容器(使用兼容版本):
bash docker run -d --name konga-database \ --network=kong-net \ -p 5433:5432 \ -e "POSTGRES_USER=konga" \ -e "POSTGRES_DB=konga" \ -e "POSTGRES_PASSWORD=konga" \ postgres:11
- 重新启动 PostgreSQL 容器(使用兼容版本):
初始化 Konga 数据库(指定平台):
docker run --rm --platform linux/amd64 \ --network=kong-net \ pantsel/konga:latest -c prepare -a postgres -u postgres://konga:konga@konga-database:5432/konga
方法 2:使用 Docker Compose(推荐)
创建一个
docker-compose.yml
文件:version: '3.8' services: kong-database: image: postgres:13 container_name: kong-database environment: POSTGRES_USER: kong POSTGRES_DB: kong POSTGRES_PASSWORD: kong ports: - "5432:5432" networks: - kong-net healthcheck: test: ["CMD-SHELL", "pg_isready -U kong"] interval: 5s timeout: 5s retries: 5 konga-database: image: postgres:11 container_name: konga-database environment: POSTGRES_USER: konga POSTGRES_DB: konga POSTGRES_PASSWORD: konga ports: - "5433:5432" networks: - kong-net kong: image: kong:latest container_name: kong depends_on: kong-database: condition: service_healthy environment: KONG_DATABASE: postgres KONG_PG_HOST: kong-database 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 KONG_ADMIN_LISTEN: '0.0.0.0:8001, 0.0.0.0:8444 ssl' ports: - "8000:8000" - "8443:8443" - "8001:8001" - "8444:8444" networks: - kong-net konga: platform: linux/amd64 image: pantsel/konga:latest container_name: konga depends_on: - konga-database - kong environment: DB_ADAPTER: postgres DB_URI: postgres://konga:konga@konga-database:5432/konga KONGA_HOOK_TIMEOUT: 120000 NODE_ENV: production TOKEN_SECRET: some-secret-token ports: - "1337:1337" networks: - kong-net networks: kong-net: driver: bridge
然后运行:
docker-compose up -d
方法 3:手动修复数据库问题
如果仍然遇到 column r.consrc does not exist
错误,可以尝试:
进入 PostgreSQL 容器:
docker exec -it konga-database psql -U konga
- 执行以下 SQL:
sql ALTER DATABASE konga SET search_path TO public, pg_catalog; \q
- 执行以下 SQL:
重新运行 Konga 初始化。
验证安装
- 等待所有容器启动(约1-2分钟)
- 访问 Konga:http://localhost:1337
- 首次访问需要注册管理员账户
- 登录后配置 Kong 管理 API 地址为
http://kong:8001
这些方法应该能解决你在 M1/M2 Mac 上运行 Konga 的问题。如果仍有问题,可以考虑使用 Rosetta 模式运行 Docker Desktop 或等待 Konga 官方支持 ARM64 架构。