Не удается открыть localhost в браузере на порту, указанном в docker-compose

Я пытаюсь собрать и запустить приложение django с помощью docker и docker-compose. docker-compose build example_app и docker-compose run example_app запускаются без ошибок, но когда я перехожу к http://127.0.0.1:8000/ страница не открывается, я просто получаю ошибку "страница недоступна" в браузере. Вот мой Dockeffile, docker-compose.yml и структура проекта

Dockerfile

FROM python:3.9-buster

RUN mkdir app
WORKDIR /app
COPY ./requirements.txt /app/requirements.txt
COPY ./requirements_dev.txt /app/requirements_dev.txt
RUN pip install --upgrade pip
RUN pip install -r /app/requirements.txt

docker-compose.yml

version: '3'

services:
  example_app:
    image: example_app
    build:
      context: ../
      dockerfile: ./docker/Dockerfile
    command: bash -c "cd app_examples/drf_example && python manage.py runserver"
    volumes:
      - ..:/app
    ports:
      - 8000:8000

структура проекта:

──app
──app_examples/drf_example/
  ────manage.py
  ────api
  ────drf_example
──requirements.txt
──requirements_dev.txt
──docker/
  ────docker-compose.yml
  ────Dockerfile

вам нужно открыть порт 8000 в вашем файле Docker

FROM python:3.9-buster

EXPOSE 8000

RUN mkdir app
WORKDIR /app
COPY ./requirements.txt /app/requirements.txt
COPY ./requirements_dev.txt /app/requirements_dev.txt
RUN pip install --upgrade pip
RUN pip install -r /app/requirements.txt

По умолчанию приложения Django bind к 127.0.0.1, что означает, что они будут принимать соединения только с локальной машины. В контексте контейнера локальная машина является контейнером, поэтому ваше приложение не будет принимать соединения из-за пределов контейнера.

Чтобы заставить его принимать соединения из любого места, вы добавляете адрес привязки к команде runserver. В вашем случае вы измените команду в файле docker-compose.yml на

command: bash -c "cd app_examples/drf_example && python manage.py runserver 0.0.0.0:8000"
Вернуться на верх