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

Docker 如何使用本地代码更改和我自己的swagger.json运行swagger ui?,docker,npm,swagger,swagger-ui,Docker,Npm,Swagger,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

上的自述文件指定可以使用您自己的文件运行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
但是我不知道如何让这个dev服务器运行Petstore示例以外的任何东西


有人能帮我把这两者结合起来,这样我就可以用本地代码更改和我自己的swagger.json运行swagger ui了吗?

我为
npm run dev
找到了它:

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

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

url: "http://petstore.swagger.io/v2/swagger.json"


以防您使用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文件

确保卷装入正确的本地目录

在本地,我在
$PWD/src/app/swagger/swagger.yaml中设置了我的swagger配置。运行以下命令效果良好:

docker run -p 80:8080 -e SWAGGER_JSON=/tmp/swagger.yaml -v `pwd`/src/app/swagger:/tmp swaggerapi/swagger-ui
只需刷新Swagger UI页面或单击标题中的“Explore”按钮,即可从my YAML文件中刷新数据

您还可以指定
BASE\u URL
摘录自


docker run-p80:8080-e BASE_URL=/swagger-e swagger_JSON=/foo/swagger.JSON-v/bar:/foo-swaggerapi/swagger ui

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

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

-v <path1>:<path2>
这用英语表示:“在端口8085上运行我的swagger ui实例。在docker容器中以“/foo”的形式装载我当前的工作目录。默认情况下,在“/foo/swagger.json”处显示swagger文件。”


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

以下是我最终解决此问题的方法,它还允许您拥有多个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   

我终于在这篇文章后面找到了我的工作。对于其他尝试这样做的人,您应该将浏览器指向“localhost/index.html”。这对我来说很好。我只是假设对于yaml文件,环境变量将更改为SWAGGER_yaml,但不是,对于yaml和JSON,它都是SWAGGER_JSON。谢谢显然,这是所有解决方案中最优雅/灵活的解决方案-谢谢!我并不认为这是理所当然的;)
-e SWAGGER_JSON=<filepath>
docker run -p 8085:8080 -e SWAGGER_JSON=/foo/swagger.json -v `pwd`:/foo swaggerapi/swagger-ui
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