如何使用本地代码更改和我自己的swagger.json运行swagger-ui?

时间:2017-09-16 17:28:10

标签: docker npm swagger swagger-ui

https://github.com/swagger-api/swagger-ui上的自述文件指定可以使用您自己的文件运行Swagger-UI

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

如果我将其翻译为

,我会工作
docker build . -t swagger-ui-local && \
  docker run -p 80:8080 -e SWAGGER_JSON=/foo/my-file.json -v $PWD:/foo swagger-ui-local

然而,这忽略了我当地的变化。

我可以用

运行我的本地更改
npm run dev

但我无法弄清楚如何让这个开发服务器运行除Petstore示例之外的其他任何东西。

任何人都可以帮我把两者结合起来,所以我可以用本地代码更改和我自己的swagger.json运行swagger-ui吗?

6 个答案:

答案 0 :(得分:7)

确保您正在安装正确的本地目录。

在本地,我在$PWD/src/app/swagger/swagger.yaml中有我的招摇配置。运行以下工作正常:

docker run -p 80:8080 -e SWAGGER_JSON=/tmp/swagger.yaml -v `pwd`/src/app/swagger:/tmp swaggerapi/swagger-ui

只需刷新Swagger-UI页面或点击标题中的“浏览”按钮,即可触发从YAML文件刷新数据。

答案 1 :(得分:3)

我认为npm run dev

my-file.json放在dev-helpers文件夹中。然后可以在http://localhost:3200/上的搜索栏中找到它。

要在打开服务器时自动加载,请通过更改

来更改dev-helpers/index.html
url: "http://petstore.swagger.io/v2/swagger.json"

url: "my-file.json"

答案 2 :(得分:1)

如果您正在使用Play Framework运行maven项目,以下步骤解决了我的问题:

1。)更改conf / routes文件。添加以下行:    GET /swagger.json controllers.Assets.at(path =“/ public / swagger-ui”,file =“swagger.json”)

2.)将swagger.json文件添加到Swagger-UI文件夹

所以当您在端口示例7777中运行mvn项目时,使用mvn play2:run启动播放服务器,然后localhost:7777 / docs将自动拉出本地添加的Json文件。

答案 3 :(得分:1)

之所以找到这个主题,是因为我想看到我的本地swagger文件的可视化表示,但似乎无法让swagger-ui(在docker中运行)显示除petstore以外的任何内容。

最终,我的问题是了解-e SWAGGER_JSON和-v标志,所以我想在这里解释它们。

-v <path1>:<path2>

此选项显示“在路径上的swagger-ui docker容器中从本地文件系统安装路径

-e SWAGGER_JSON=<filepath>

此选项显示为“默认情况下,使用docker容器的文件系统在中显示文件的摇摇欲坠”。这里重要的一点是,该文件路径应考虑到您如何在上面设置

将它们放在一起,最终得到以下结果:

docker run -p 8085:8080 -e SWAGGER_JSON=/foo/swagger.json -v `pwd`:/foo swaggerapi/swagger-ui

这是用英语说的:“在端口8085上运行我的swagger-ui实例。在docker容器中将当前工作目录安装为'/ foo'。默认情况下,在'/foo/swagger.json'中显示swagger文件。 。”

要注意的重要一点是,我在当前工作目录中有一个名为swagger.json的文件。该命令将我当前的工作目录作为/ foo挂载到docker容器中。然后,swagger UI可以将我的swagger.json提取为/foo/swagger.json。

答案 4 :(得分:0)

这是我最终解决此问题的方法,它还允许您拥有多个YML文件:

docker run -p 80:8080 \                                                                                                                                 
  -e URLS_PRIMARY_NAME=FIRST \                                                                                                                             
  -e URLS="[ \                                                                                                                                           
    { url: 'docs/first.yml', name: 'FIRST' } \                                                                                                               
    , { url: 'docs/second.yml', name: 'SECOND' } \                                                                                                             
  ]" \                                                                                                                                                   
  -v `pwd`:/usr/share/nginx/html/docs/ \                                                                                                                 
  swaggerapi/swagger-ui   

答案 5 :(得分:0)

Docker 组合解决方案:

创建 .env 文件并添加以下内容:

URLS_PRIMARY_NAME=FIRST
URLS=[ { url: 'docs/swagger.yaml', name: 'FIRST' } ]

并创建一个包含以下内容的 docker-compose 文件:

version: "3.3"

services:
 swagger-ui:
  image: swaggerapi/swagger-ui
  container_name: "swagger-ui"
  ports:
    - "80:8080"
  volumes:
   - /local/tmp:/usr/share/nginx/html/docs/
  environment:
    - URLS_PRIMARY_NAME=${URLS_PRIMARY_NAME}
    - URLS=${URLS}

swagger.yaml 位于 /local/tmp。