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を実行できますか?
私は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"
正しいローカルディレクトリをボリュームマウントしていることを確認してください。
ローカルでは、私は$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ファイルのデータが更新されました。
このトピックを見つけたのは、ローカルの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として取得できます。
これが私がこれを解決した方法です。複数の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
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ファイルを自動的にプルします。