Предоставление локального файла для swagger ui через Docker

Я прочитал на 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.

Любые идеи, что не так?

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
2
0
2 385
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Я думаю, вам нужно указать 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 и ваш общий каталог.

Другие вопросы по теме