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

Windows下Docker部署Kong API Gateway重启后绑定失败求助

解决Windows Docker Host模式下Kong重启后启动失败的问题

问题分析

报错bind() to unix:/usr/local/kong/sockets/we failed (98: Address already in use)是因为Kong容器异常退出后,容器内残留了Unix套接字文件,重启时无法重新绑定。结合Windows Hyper-V环境下的host网络特性,这些套接字文件不会被自动清理,导致启动失败。

解决方案

方案1:清理残留的套接字文件(无需删除容器)

  1. 启动临时容器,挂载原Kong容器的目录:
docker run -it --rm --volumes-from kong kong:latest sh
  1. 在容器内删除残留的套接字文件:
rm -rf /usr/local/kong/sockets/*
  1. 退出临时容器,启动原Kong容器:
docker start kong

方案2:修改Kong配置,指定自定义套接字路径

在Kong启动命令中添加环境变量,替换默认的套接字路径,避免残留文件冲突:

docker run -d --name kong --net=host \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=localhost" \
-e "KONG_PG_USER=kong" \
-e "KONG_PG_PASSWORD=kong" \ # 注意统一密码,原命令中PostgreSQL密码为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" \
-e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
-e "KONG_NGINX_PROXY_LISTEN=unix:/usr/local/kong/custom-sockets/proxy.sock" \
-e "KONG_NGINX_ADMIN_LISTEN=unix:/usr/local/kong/custom-sockets/admin.sock" \
-p 8000:8000 -p 8443:8443 -p 127.0.0.1:8001:8001 -p 127.0.0.1:8002:8002 -p 127.0.0.1:8444:8444 \
kong:latest

方案3:改用Docker自定义网络替代Host模式(推荐)

Host模式在Windows环境下兼容性较差,改用自定义网络可以从根源避免套接字残留问题:

  1. 创建自定义网络:
docker network create kong-net
  1. 启动PostgreSQL容器:
docker run -d --name kong-database --net=kong-net \
-e POSTGRES_USER=kong \
-e POSTGRES_DB=kong \
-e POSTGRES_PASSWORD=kong \
postgres:latest
  1. 执行Kong迁移初始化:
docker run --rm --net=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
  1. 启动Kong容器:
docker run -d --name kong --net=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" \
-e "KONG_ADMIN_GUI_URL=http://localhost:8002" \
-p 8000:8000 -p 8443:8443 -p 127.0.0.1:8001:8001 -p 127.0.0.1:8002:8002 -p 127.0.0.1:8444:8444 \
kong:latest

额外注意点

原部署命令中存在密码不一致问题:PostgreSQL设置的密码是kong,但迁移和Kong启动命令中使用的是kongpass,这会导致数据库连接失败,建议统一密码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:40:13