通过 Docker 提供本地文件以 swagger ui

Providing local file to swagger ui through Docker

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

时,我仍然得到默认的宠物店示例,而不是我自己的 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/"

and 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.

有什么想法吗?

今天,我遇到了同样的问题。 要理解的关键是 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

对于 mac 中遇到此问题的人来说,这是一个权限问题。在 Catalina 之后默认情况下,docker 没有权限允许其图像读取您系统中的本地文件。一旦给出它对我有用,它就占用了我当地的 swagger json 文件。

要立即授予权限,请转到系统偏好设置> 安全和隐私> 文件和文件夹,然后为 Mac 和您的共享目录添加 Docker。