提供本地文件以通过Docker扩展ui

时间:2019-06-11 10:44:55

标签: docker swagger swagger-ui

我在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.

有什么想法吗?

2 个答案:

答案 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,它应在纠正上述命令后起作用。