Kong配置文件未加载新修改内容问题求助
解决Kong Docker容器修改配置不生效的问题
我碰到过很多类似的场景,核心问题其实是Docker容器的文件系统特性——你直接在容器内部修改的文件是临时的,容器重启后会基于原始镜像重新创建,之前的修改自然就丢失了。下面分享两种最常用的解决方案,以及排查问题的关键点:
方案一:挂载宿主机配置文件与插件目录(推荐)
这是最灵活的方式,方便你随时修改配置和插件,修改后重启容器就能生效:
- 导出默认配置文件到宿主机
先从运行中的Kong容器把默认配置复制出来:
docker cp <你的Kong容器名>:/etc/kong/kong.conf ./kong.conf
- 修改宿主机上的配置文件
打开kong.conf,添加你的自定义插件和路径:
- 启用插件:找到
plugins项,改成plugins=bundled,你的插件名(bundled用来保留官方默认插件) - 设置插件路径:添加
lua_package_path=/usr/local/share/lua/5.1/kong/plugins/你的插件名/?.lua;;(确保路径和后续挂载的目录对应)
准备自定义插件目录
在宿主机上创建插件目录,比如./my-custom-plugin,把你的插件代码(handler.lua、schema.lua等核心文件)放进去,注意目录名要和插件名完全一致。重新启动Kong容器(挂载宿主机文件)
先停止并删除旧容器,再用挂载参数启动新容器:
docker stop <旧容器名> && docker rm <旧容器名> docker run -d \ --name kong-custom \ -v $(pwd)/kong.conf:/etc/kong/kong.conf \ -v $(pwd)/my-custom-plugin:/usr/local/share/lua/5.1/kong/plugins/my-custom-plugin \ -e "KONG_DATABASE=off" # 如果用数据库模式,替换成你的数据库配置,比如KONG_PG_HOST=xxx -p 8000:8000 \ -p 8443:8443 \ kong:latest
方案二:构建自定义Kong镜像(适合需要分发的场景)
如果需要把配置和插件打包成镜像分发给团队,这种方式更合适:
- 创建Dockerfile
在项目根目录新建Dockerfile,内容如下:
FROM kong:latest # 复制自定义插件到Kong的官方插件目录 COPY my-custom-plugin /usr/local/share/lua/5.1/kong/plugins/my-custom-plugin # 复制修改后的配置文件到容器内 COPY kong.conf /etc/kong/kong.conf
- 构建自定义镜像
docker build -t my-kong-with-plugins .
- 运行自定义镜像
docker run -d --name my-kong -p 8000:8000 -p 8443:8443 my-kong-with-plugins
排查要点(如果配置还是不生效)
- 验证配置文件语法
进入容器运行检查命令,确认配置没有语法错误:
docker exec -it <容器名> kong check /etc/kong/kong.conf
如果有错误会直接提示,修正后再重启容器。
- 检查插件目录结构
Kong插件需要遵循标准结构,缺少核心文件会导致加载失败:
my-custom-plugin/ ├── handler.lua ├── schema.lua └── README.md(可选)
- 查看容器日志找报错
检查启动日志,看有没有插件找不到或配置加载失败的信息:
docker logs <容器名>
比如看到"plugin not found",就需要检查插件路径或目录名是否正确。
- 确认容器加载了正确的配置
进入容器查看配置文件内容,确认挂载是否生效:
docker exec -it <容器名> cat /etc/kong/kong.conf
如果还是默认内容,说明挂载路径有问题,建议用绝对路径替换$(pwd)试试。
内容的提问来源于stack exchange,提问作者Oussama Elkhdadi
相关产品推荐
相关产品推荐

