Я прочитал на https://swagger.io/docs/open-source-tools/swagger-ui/usage/installation/, что можно разместить локальный файл (swagger.json) в пользовательском интерфейсе swagger через докер, написав
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
Однако я по-прежнему получаю пример зоомагазина по умолчанию, а не свой собственный swagger.json, когда смотрю на http://127.0.0.1:8086/.
Я попытался изменить то, что написано на панели исследования, чтобы оно отличалось от значения по умолчанию (https://petstore.swagger.io/v2/swagger.json) на swagger.json, что дает не найдено на самом веб-сайте и на хосте докера.
[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/"
и 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
в качестве пути к локальному файлу и объема.
Это должно быть что-то вроде этого
docker run -p 8086:8080 -e SWAGGER_JSON=C:/wildfly-9.0.2.Final/swagger.json -v C:/wildfly-9.0.2.Final:/mnt swaggerapi/swagger-ui
Что касается вашей последней ошибки
вы не можете получить доступ к C:/wildfly-9.0.2.Final/swagger.json
из своего контейнера, так как файл находится на хосте. Вместо этого попробуйте /mnt/swagger.json
, это должно работать после исправления вышеуказанной команды.
Сегодня у меня была такая же проблема.
Ключ к пониманию заключается в том, что 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 у докера нет разрешения разрешать своим образам читать локальные файлы в вашей системе. Как только это было дано, это сработало для меня, и мне потребовался мой локальный файл swagger json.
Чтобы предоставить привилегии сейчас, перейдите в «Системные настройки» > «Безопасность и конфиденциальность» > «Файлы и папки» и добавьте Docker для Mac и ваш общий каталог.