web-dev-qa-db-ja.com

ローカルコードの変更と自分のswagger.jsonを使用してswagger-uiを実行する方法

https://github.com/swagger-api/swagger-ui のReadmeは、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

しかし、この開発サーバーでペットストアの例以外を実行する方法がわかりません。

誰かが2つを組み合わせるのを手伝ってくれるので、ローカルコードの変更と自分のswagger.jsonでswagger-uiを実行できますか?

9
Harald Nordgren

私はnpm run devについてそれを理解しました:

my-file.jsondev-helpersフォルダに配置します。その後、http://localhost:3200/の検索バーから利用できます。

サーバーを開いたときに自動的にロードするには、次のように変更してdev-helpers/index.htmlを変更します

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

url: "my-file.json"
3
Harald Nordgren

正しいローカルディレクトリをボリュームマウントしていることを確認してください。

ローカルでは、私は$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ページを更新するか、ヘッダーの[Explore]ボタンをクリックするだけで、YAMLファイルのデータが更新されました。

8
Garrett

このトピックを見つけたのは、ローカルのswaggerファイルを視覚的に表示したかったのですが、swagger-ui(dockerで実行中)にペットストア以外のものを表示させることができなかったためです。

結局、私の問題は-e SWAGGER_JSONと-vフラグを理解することでしたので、ここでそれらを説明したいと思いました。

-v <path1>:<path2>

このオプションは、「パス<path2>のswagger-ui Dockerコンテナー内のローカルファイルシステムからパス<path1>をマウントします」と表示されます。

-e SWAGGER_JSON=<filepath>

このオプションは、「デフォルトでは、Dockerコンテナーのファイルシステムを使用して、<filepath>にあるファイルのSwaggerを表示します。」ここで重要なのは、このファイルパスでは、上記の<path2>の設定方法を考慮する必要があるということです。

まとめると、次のようになりました。

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として取得できます。

3
KFox112

これが私がこれを解決した方法です。複数の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   
2
Adam Grant

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ファイルを自動的にプルします。

1
Ranjan Rozario