Как мне получить доступ к URL-адресу FastAPI из моего приложения докера?Python

Программы на Python
Anonymous
Как мне получить доступ к URL-адресу FastAPI из моего приложения докера?

Сообщение Anonymous »

У меня есть интерфейсное приложение React, размещенное на субдомене (www.admin.example.com). У меня также есть серверное приложение, которое использует FastAPI для связи с интерфейсным приложением реагирования. Это серверное приложение развертывается с помощью Docker. Внешний интерфейс создается с помощью команды npm run build и развертывается вручную, т. е. файлы сборки копируются в корневой каталог субдомена.
Однако у меня возникли проблемы с доступом к этому серверному приложению FastAPI, которое размещается с использованием докера. Я пробовал использовать IP-адрес моего сервера + порт (

Код: Выделить всё

https://server_ip_address:8000
), но я не получаю ответ, заданный по пути / от моего бэкэнда FastAPI. Этот URL-адрес (https://server_ip_address:8000) фактически не загружает страницу. Я получаю сообщение об ошибке: Этот сайт недоступен.
Но когда я захожу на https://server_ip_address, я загружаю страницу, рассказывающую о nginx. Я проверил журналы докера, и приложение FastAPI не обнаружило ни ошибок, ни ответа. Мне сказали, что у докера тоже есть собственный IP-адрес, но я попробовал это, и это не сработало. Я также не могу получить доступ к URL-адресу, например https://server_ip_address:8000, из моего внешнего приложения, иначе я получаю ошибку политики CORS. Общий вопрос: как мне получить доступ к моему приложению FastAPI, прослушивающему Docker?
Файл Docker Compose:

Код: Выделить всё

services:
db:
build: .
expose:
- "8000"
secrets:
- MONGODB_URI
- LOGIN_SECRET_KEY

nginx:
build:
context: .
dockerfile: Dockerfile.nginx
ports:
- "8000:8000"
depends_on:
- db
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf

secrets:
LOGIN_SECRET_KEY:
file: admin_login_secret_key.txt
MONGODB_URI:
file: mongo_db_uri.txt
Файл Docker:

Код: Выделить всё

# Use an official Python runtime as a base image
FROM python:3.9

# Set the working directory in the container
WORKDIR /app

# Copy the dependencies file to the working directory
COPY requirements.txt .

# Install dependencies
RUN pip install --no-cache-dir -r requirements.txt

# Copy the content of the local src directory to the working directory
COPY . .

# Specify the command to run on container start
CMD ["uvicorn", "db:app", "--host", "0.0.0.0", "--port", "8000"]
Файл nginx.conf

Код: Выделить всё

server {
listen 8000;
server_name www.admin.example.com;

location / {
proxy_pass http://db:8000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Dockerfile.nginx

Код: Выделить всё

# Use the official Nginx image from the Docker Hub
FROM nginx:latest

# Copy the custom Nginx configuration file to the container
COPY nginx.conf /etc/nginx/conf.d/default.conf
Я хотел знать, отличаются ли IP-адрес домена и IP-адрес сервера. Я спросил, и кто-то из команды дал мне тот же IP-адрес. Поэтому я хочу, чтобы они были одинаковыми.
ПРИМЕЧАНИЕ
У нас есть разные поддомены в домене. www.example.com, и я не знаю, возможно ли еще отдельно развернуть приложение FastAPI с помощью Docker без конфликтов. Но это будет зависеть от того, как мне нужно получить к нему доступ.

Подробнее здесь: https://stackoverflow.com/questions/786 ... pplication

Вернуться в «Python»