Docker 图片中的 Swagger 运行 本地 json 文件

Swagger running with local json file in Docker Image

所以,我想 运行 local Swagger UI 相对于 Local Json。为此,我遵循可用的说明 here:

这是该文档中共享的命令:

docker run -p 8081:8080 -e SWAGGER_JSON=/foo/swagger.json -v /bar:/foo swaggerapi/swagger-ui

这里我理解-p选项但是这个-e-v是令人困惑。

所以假设我 在我的桌面 Mac 中保存了一个 JSON 文件,其路径是 :

/Users/abc/Desktop/lp.json 因此对于此文件,命令将更改为:

docker run -p 8081:8080 -e SWAGGER_JSON=/Users/abc/Desktop/lp.json -v /bar:/foo swaggerapi/swagger-ui

但是命令的 -v 部分呢?关于 -v 选项,我需要输入的值是多少,尽管基本命令即:

docker run -p 8081:8080 swaggerapi/swagger-ui

Runs and SwaggerUI 在 http:localhost:8081 可用,但默认 Json 而不是我的 Json,即http://petstore.swagger.io/v2/swagger.json

所以我的问题是我应该如何更改 docker 的命令,这将 运行 Swagger 的图像UI 和我当地的 JSON?

请帮忙。提前致谢。 & 快乐编码 :)

在docker命令中-v表示挂载卷,-e表示添加环境变量,所以你想要的大概是这样的:

docker run -p 8081:8080 -e SWAGGER_JSON=/mnt/lp.json -v /Users/abc/Desktop:/mnt swaggerapi/swagger-ui

对我来说,以下命令很有帮助

docker run -p 8081:8080 -e SWAGGER_JSON=/tmp/swagger.json -v `pwd`/docs:/tmp swaggerapi/swagger-ui:v3.21.0

'pwd'/docs => 包含我的 swagger.json 文件。

swaggerapi/swagger-ui:v3.21.0 => 此版本支持 SWAGGER_JSON.Its 测试。

我在 Windows 上的工作方式是这样的:

docker run -p 80:8080 -e SWAGGER_JSON=/mnt/swagger-v1.json -v C:\Users\jimen\Downloads:/mnt swaggerapi/swagger-ui

其中C:\Users\jimen\Downloads是本地swagger文件所在的文件夹(swagger-v1.json)。

我其实想要 swagger-editor 而不是 swaggerapi/swagger-ui:

docker pull swaggerapi/swagger-editor
docker run -p 7999:8080 swaggerapi/swagger-editor 

然后你会得到一个完整的 File 菜单:

您可以执行以下操作,而不是指定 SWAGGER_JSON 以立即在 Swagger UI 中获取您的 API 规范开放式 UI:

docker run --name my-swagger-ui -p 80:8080 -e URL=api/openapi.yaml -v ${PWD}://usr/share/nginx/html/api swaggerapi/swagger-ui:v3.51.1

这也用一天前发布的最新 swagger-ui 图片进行了测试。

注意: 我 运行 这个命令来自 Windows,因此指定环境变量 ${PWD} 在 [=33] 中可能有点不同=].


幕后发生的事情

这里发生的事情是,您在 nginx html 文件夹中安装了一个卷 (-v ${PWD}://usr/share/nginx/html/api),其中包含您的 swagger 规范(在本例中为 openapi.yaml)。使用 -e URL=api/openapi.yaml 默认的 URL 将被覆盖,取而代之的是你的 swagger 规范将被使用。