如何无需多次启动Docker,通过URL动态切换Swagger Editor展示的文件?
解决方案:单端口多路径加载不同Swagger文件
默认的swaggerapi/swagger-editor Docker镜像本身不支持通过不同路径直接加载不同的本地Swagger文件——它的单实例设计是绑定一个指定的SWAGGER_FILE启动的,没法动态切换文件路径。不过可以通过两种方式实现你要的效果:
方法1:反向代理(推荐,简单易维护)
用Nginx做反向代理,把不同的路径转发到不同的Swagger Editor容器,每个容器对应一个Swagger文件:
- 创建Docker网络(让Nginx和Swagger容器互通):
docker network create swagger-net
- 启动多个Swagger Editor容器(每个对应一个文件,不用暴露主机端口):
# 第一个容器,加载swagger1.json docker run -d --name swagger-editor1 --network swagger-net -v $(pwd)/swagger1.json:/tmp/swagger.json -e SWAGGER_FILE=/tmp/swagger.json swaggerapi/swagger-editor # 第二个容器,加载swagger2.json docker run -d --name swagger-editor2 --network swagger-net -v $(pwd)/swagger2.json:/tmp/swagger.json -e SWAGGER_FILE=/tmp/swagger.json swaggerapi/swagger-editor
- 配置Nginx反向代理:
创建nginx.conf文件,内容如下:
events {} http { server { listen 80; location /swagger { proxy_pass http://swagger-editor1:8080/; proxy_set_header Host $host; } location /swagger2 { proxy_pass http://swagger-editor2:8080/; proxy_set_header Host $host; } } }
- 启动Nginx容器:
docker run -d --name swagger-proxy --network swagger-net -p 80:80 -v $(pwd)/nginx.conf:/etc/nginx/nginx.conf nginx
现在访问localhost/swagger就能看到swagger1.json的内容,访问localhost/swagger2就能看到swagger2.json的内容,不用重复启动容器。
方法2:自定义Swagger Editor镜像(复杂度高)
如果不想用多个容器,可以修改Swagger Editor的前端代码,添加路径匹配逻辑,让它根据URL路径加载不同的本地文件。但这个需要你 fork 官方仓库做定制,然后重新构建Docker镜像,适合有前端开发经验的用户,不推荐新手使用。
内容的提问来源于stack exchange,提问作者J.Doe
相关产品推荐
相关产品推荐

