Несмотря на то, что вы установили API_URL
в своем docker-compose.yml
, фактический запрос на получение файла спецификации выполняется браузером.
Итак, ваш браузер должен разрешать этот URL, а не сам контейнер swagger-ui.
Кроме того, поскольку это так, вам вообще не нужен удаленный интерфейс Swagger, размещенный вообще. Просто запустите отдельный локальный контейнер swagger-ui и при необходимости измените URL на файл swagger в самом интерфейсе пользователя.
ОБНОВЛЕНИЕ: Использование SWAGGER_JSON
version: "3"
services:
postgrest:
image: postgrest/postgrest
ports:
- 3000:3000
environment:
PGRST_DB_URI: postgres://app_user:password@postgres:5432/app_db
PGRST_DB_SCHEMA: public
PGRST_DB_ANON_ROLE: app_user
depends_on:
- postgres
postgres:
image: postgres
ports:
- 5435:5432
environment:
POSTGRES_DB: app_db
POSTGRES_USER: app_user
POSTGRES_PASSWORD: password
volumes:
- "./pgdata:/var/lib/postgresql/data"
save-swagger:
image: busybox
depends_on:
- postgrest
volumes:
- swagger-json:/spec
command: >
/bin/sh -c "sleep 15
&& mkdir -p /spec
&& wget -O /spec/swagger.json http://postgrest:3000"
swagger:
image: swaggerapi/swagger-ui
expose:
- 8080
ports:
- 8029:8080
links:
- postgrest:postgrest
environment:
SWAGGER_JSON: /spec/swagger.json
volumes:
- swagger-json:/spec
volumes:
swagger-json:
Обратите внимание, что использование sleep
не лучший подход. Вы можете проверить лучшие варианты, такие как ожидание / ожидание / ожидание его
PS: я пробовал wait-for
& wait-for-it
, но, поскольку postgrest
имеет свою конечную точку, доступную даже при том, что соединение с БД не было успешным, оно отвечало 503
, и оба эти утилиты просто проверьте доступность сокета TCP, поэтому не работайте так, как ожидалось.
wait-on
будет работать, так как он проверяет 2xx
для запросов HEAD, но вам понадобится контейнер с nodejs, поэтому я остановился на sleep
в качестве простейшего примера того, что нужно сделать. :)