Не удается открыть 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"