услуга портового перенаправления -> контейнер

услуга портового перенаправления -> контейнер

У меня есть один сервис, содержащий один контейнер.

в контейнере находится сервер django с открытым портом 8000.

А моя среда обслуживания и контейнера находится ниже.

docker container ls

CONTAINER ID        IMAGE                                    COMMAND                  CREATED             STATUS                   PORTS                   NAMES
500e9b49dd35        registry:5000/myapp/djangosrc:latest   "python manage.py ru…"   2 minutes ago       Up 2 minutes             80/tcp, 8000-8001/tcp   django_python.ti4iq9vbe6b6tskrnfni1r194.prc5s92pxrrfeerjj0oqnjykl

docker service ls

ID                  NAME                MODE                REPLICAS            IMAGE                                    PORTS
l1z94x8t69li        django_python       global              1/1                 registry:5000/myapp/djangosrc:latest   *:8001->8001/tcp, *:8082->8000/tcp

Итак, когда я захожу внутрь контейнера, все работает хорошо.

/ #docker container exec -it 500e9b49dd35 wget localhost:8000

index.html        100%[===================>]  77.36K  --.-KB/s    in 0s

Однако я не могу подключиться кwget localhost:8082

Connecting to localhost:8082 (127.0.0.1:8082)
wget: can't connect to remote host (127.0.0.1): Connection refused

Я что-то не так понял???

Пожалуйста, помогите мне. Я действительно приветствую любую помощь или подсказку.


Это тесты, предложенные @BMitch (спасибо!!)

docker run --rm --net container:500e9b49dd35 nicolaka/netshoot ss -lnt

Status: Downloaded newer image for nicolaka/netshoot:latest
State   Recv-Q   Send-Q     Local Address:Port      Peer Address:Port  Process  
LISTEN  0        128           127.0.0.11:40105          0.0.0.0:*              
LISTEN  0        10             127.0.0.1:8000           0.0.0.0:*            

Я решил проблему.

Это связано с сервером, а не с переадресацией портов.

мой сервер

python manage.py runserver

это связывает127.0.0.1

поэтому я изменился на

python manage.py runserver 0.0.0.0:8000

Я могу получить доступ снаружи.

Спасибо за помощь.

решение1

Из этого вывода видно, что ваше приложение внутри контейнера прослушивает 127.0.0.1 или выполняет петлю:

docker run --rm --net container:500e9b49dd35 nicolaka/netshoot ss -lnt

Status: Downloaded newer image for nicolaka/netshoot:latest
State   Recv-Q   Send-Q     Local Address:Port      Peer Address:Port  Process  
LISTEN  0        128           127.0.0.11:40105          0.0.0.0:*              
LISTEN  0        10             127.0.0.1:8000           0.0.0.0:*            

Сетевое взаимодействие в пространстве имен в docker, включая интерфейс loopback. Таким образом, каждый контейнер имеет свой собственный интерфейс loopback, отдельный от хоста и других контейнеров по умолчанию. Вам необходимо настроить приложение для прослушивания всех интерфейсов, чтобы приложение было доступно извне контейнера, включая работу опубликованных портов. В IPv4 это означает прослушивание 0.0.0.0 вместо 127.0.0.1. Это необходимо настроить в самом приложении, docker не контролирует порты, используемые приложением, он только перенаправляет на эти порты.

Связанный контент