Не получается запустить образ Docker

Рейтинг: 0Ответов: 2Опубликовано: 12.08.2023

Вот мой Dockerfile:

FROM ubuntu
RUN apt-get update
RUN apt-get install -y python3 python3-pip
WORKDIR /usr/src/app
COPY ./requirements.txt /usr/src/requirements.txt
RUN pip install -r /usr/src/requirements.txt
RUN apt-get update
COPY . /usr/src/app
EXPOSE 80
ENTRYPOINT ["python3", "manage.py", "runserver", "212"]

Я только осваиваю докер, поэтому проясню как я понимаю некоторые моменты. Expose - говорит на каком хосте в образе будет запускаться приложение. Поправьте, если не прав. Я создаю контейнер и запускаю образ:

docker run  -p 212:80 sixzerx/app

Но когда перехожу по http://127.0.0.1:212/, то получаю "Не удается установить соединение с сайтом"

Ответы

▲ 0

EXPOSE 80 - 80-й порт. Попробуйте http://127.0.0.1/

▲ 0

Попробуйте в Dockerfile последнюю строчку заменить на:

ENTRYPOINT ["python3", "manage.py", "runserver", "0.0.0.0:212"]

0.0.0.0:212 слушать 212 порт внутри контейнера на всех доступных сетях. Я не знаю деталей python, но созможно если запускать без 0.0.0.0 он слушает только localhost внутри контейнера, а он не доступен из вне.

Запускать контейнер этой командой:

docker run -p 212:212 sixzerx/app

Просто говорит, что мы мапим порт 212 внутри контейнера на такой же на хосту.

PS:

EXPOSE 80 просто информационная команда, которая подсказывает что приложение запущено на порту 80, но фактически ничего не делает, если вы не используете -P флаг (именно "большая" буква P). Docker Docs

The EXPOSE instruction does not actually publish the port. It functions as a type of documentation between the person who builds the image and the person who runs the container, about which ports are intended to be published. To actually publish the port when running the container, use the -p flag on docker run to publish and map one or more ports, or the -P flag to publish all exposed ports and map them to high-order ports.