我在https://swagger.io/docs/open-source-tools/swagger-ui/usage/installation/上已经读到,可以通过以下方式通过docker在swagger ui上托管本地文件(swagger.json):
docker run -p 80:8080 -e SWAGGER_JSON=/foo/swagger.json -v /bar:/foo swaggerapi/swagger-ui
因为我的swagger.json文件位于C:\ wildfly-9.0.2.Final,所以我将其写为
docker run -p 8086:8080 -e SWAGGER_JSON=/mnt/swagger.json -v C:/wildfly-9.0.2.Final:/mnt swaggerapi/swagger-ui
但是,在查看http://127.0.0.1:8086/时,我仍然得到默认的petstore示例,而不是我自己的swagger.json。
我试图将浏览栏中写的内容与默认值(https://petstore.swagger.io/v2/swagger.json)更改为swagger.json,从而在网站本身和Docker主机上都找不到
[error] 26#26: *2 open() "/usr/share/nginx/html/swagger.json" failed (2: No such file or directory), client: 172.17.0.1, server: localhost, request: "GET /swagger.json HTTP/1.1", host: "127.0.0.1:8090", referrer: "http://127.0.0.1:8090/"
和C:/wildfly-9.0.2.Final/swagger.json,该错误会在网站上显示错误
Fetch errorFailed to fetch C:/wildfly-9.0.2.Final/swagger.json
Fetch errorPossible cross-origin (CORS) issue? The URL origin (file://) does not match the page (http://127.0.0.1:8086). Check the server returns the correct 'Access-Control-Allow-*' headers.
有什么想法吗?
答案 0 :(得分:1)
今天,我遇到了同样的问题。
理解的关键是SWAGGER_JSON
必须指向容器内部的路径,而不是本地文件系统上的路径。本质上,您所做的是:首先在本地安装您拥有 swagger.json
的文件夹,然后 swagger-ui 使用 SWAGGER_JSON
环境变量来查找它。
docker run \
--name swagger \
--rm \
-p 8080:8080 \
-e SWAGGER_JSON=/bar/swagger.json \
-v /c/my/local/path/to/swagger/file:/bar \
swaggerapi/swagger-ui
答案 1 :(得分:0)
我认为您还需要提供SWAGGER_JSON
作为本地文件路径和卷
应该是这样
docker run -p 8086:8080 -e SWAGGER_JSON=C:/wildfly-9.0.2.Final/swagger.json -v C:/wildfly-9.0.2.Final:/mnt swaggerapi/swagger-ui
关于您的最后一个错误
您无法从容器访问C:/wildfly-9.0.2.Final/swagger.json
,因为文件位于主机上。相反,请尝试/mnt/swagger.json
,它应在纠正上述命令后起作用。