Как получить доступ к приложению Django в контейнере docker с другой машины?

I am pretty new to Docker and Django. So what i did was, putty to a linux server and created a folder in the root directory and then using django-admin startproject I started a new project. Now, since I am using putty for ssh terminal access, I will not be able to access a browser in the linux machine and then ping 127.0.0.1:8000 to see whether "congratulations!" screen by Django is visible or not.

Так что я предположил, что сервер может быть запущен после команды runserver. Затем с помощью docker я подготовил контейнер на машине linux, где я открыл порт 9000. Также я не могу получить доступ к этому контейнеру, поскольку я не могу получить доступ к браузеру на машине linux. Теперь у меня есть три следующих вопроса:

1.) Как получить доступ к этому контейнеру docker (внутри машины linux), используя мою машину windows? Под этим я подразумеваю, что если я открою, скажем, браузер google chrome на машине windows и введу некоторый url:port, смогу ли я увидеть экран "Поздравляем!" в моем браузере на windows?

2.) Я не совсем понимаю, как работает сетевой порт и ip этого контейнера (я имею в виду, как хост или любой другой компьютер получает доступ к этому контейнеру docker) Я пытался найти много документации и видео на youtube, но я очень сильно запутался. Потому что я знаю, чтобы сделать ваш сайт/приложение доступным для внешнего мира, нам нужно доменное имя, размещенное на каком-то облаке, за которое мы должны платить, но как docker может сделать это бесплатно? Возможно, это прозвучит неубедительно, но, пожалуйста, помогите мне понять.

3.) Как должна выглядеть моя команда docker run для доступа с моей windows-машины?

Мой dockerfile:

FROM python:3.6-slim

ENV PYTHONUNBUFFERED=1

RUN mkdir /Django

WORKDIR /Django

ADD . /Django

RUN pip install -r requirements.txt

EXPOSE 9000

CMD python manage.py runserver 0.0.0.0:9000

Я использую следующую команду для сборки:

docker build -t myproj .

Пожалуйста, помогите прояснить мои вопросы, парень. Я буду вечно благодарен :) Спасибо всем!

Попробуйте запустить его без EXPOSE 9000, когда вы раскрываете порт, он виден только внутри контейнера, а не во внешнем мире. После этого зайдите в браузер и перейдите по адресу <server_ip>:9000, и вы, вероятно, увидите сообщение.

При запуске контейнера вам понадобится docker run -p опция:

docker run -p 12345:9000 myproj

Второй номер порта должен совпадать с номером порта, который прослушивает реальный серверный процесс (в вашем случае аргумент порта в ./manage.py runserver). Первый номер порта может быть любым номером порта, который не используется на хост-системе.

Тогда (до ограничений сети и брандмауэра) другая система может связаться с контейнером, используя IP-адрес хоста и первый номер порта; http://my-dev-system.internal.example.com:12345. Если вы звоните с хоста напрямую, то эти две системы одинаковы, и в этом особом случае вы можете использовать http://localhost:12345.

В качестве детали реализации контейнер имеет свой собственный IP-адрес, но вам никогда не нужно его искать или использовать. (С точки зрения других систем процесс на базе Docker неотличим от процесса, запущенного непосредственно на хосте. Docker не решает проблемы, связанные с необходимостью где-то разместить приложение, придумать DNS-имя для хоста или другие подобные проблемы.

Вернуться на верх