multiscripter
@multiscripter

Как правильно настроить docker-compose чтобы получить доступ к сайту на FastAPI из браузера?

Помогите настроить контейнеры Docker.
В одном MongoDB, в другом сайт на FastAPI и сервере Uvicorn.
Команда docker-compose up -d отрабатывает норм.
Если зайти в контейнер и curl`ом запросить 127.0.0.1:8000 то ответ от сервера есть.
Не могу зайти из браузера. CURL 127.0.0.1:8000 возвращает: curl: (56) Recv failure: Connection reset by peer
ЧЯДНТ?

Dockerfile
FROM python:3.8.7-buster

# set work directory
WORKDIR /usr/src/app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
# don't create .pyc files.
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip install -r requirements.txt

# copy project
COPY . /usr/src/app/

RUN cd /usr/src/app/


docker-compose.yml
version: '3.8'

services:

  mongodb:
    command: mongod --noauth --port 27017
    container_name: mongodb
    environment:
      - MONGO_INITDB_DATABASE=phrase-fastapi-mongodb
    image: mongo:4.4.5-bionic
    ports:
      - "27017:27017"
    volumes:
      - .:/usr/src/app/

  web:
    build: .
    command: uvicorn main:famd_app
    container_name: web
    ports:
      - "8000:8000"
    volumes:
      - .:/usr/src/app/
  • Вопрос задан
  • 893 просмотра
Решения вопроса 1
multiscripter
@multiscripter Автор вопроса
Директива network_mode: host помогла.
docker-compose.yml теперь выглядит так:
Добавил заполнение базы Mongo при подъёме контейнеров:
version: '3.8'

services:

  mongodb:
    command: mongod --noauth
    container_name: mongodb
    image: mongo:4.4.5-bionic
    network_mode: host
    ports:
      - "27017:27017"
    volumes:
      - .:/app/

  mongo_seed:
    command: /app/restore-mongodb-dump.sh
    container_name: mongo_seed
    image: mongo:4.4.5-bionic
    depends_on:
      - mongodb
    network_mode: host
    volumes:
      - .:/app/

  web:
    build: .
    command: uvicorn main:famd_app
    container_name: web
    depends_on:
      - mongodb
    network_mode: host
    ports:
      - "8000:8000"
    volumes:
      - .:/app/


Dockerfile немного упростил:
FROM python:3.8.7-buster

# set work directory
WORKDIR /app

# set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
# don't create .pyc files.
ENV PYTHONUNBUFFERED 1

# install dependencies
RUN pip install --upgrade pip
COPY requirements.txt .
RUN pip install -r requirements.txt

# copy project
COPY . .


restore-mongodb-dump.sh
#! /bin/bash

mongorestore --host 127.0.0.1 /app/resources/dump/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@q2digger
никого не трогаю, починяю примус
Не вижу директиву EXPOSED в докерфайле.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы