포트포워딩 서비스 -> 컨테이너

포트포워딩 서비스 -> 컨테이너

하나의 컨테이너를 포함하는 하나의 서비스가 있습니다.

컨테이너에는 포트 8000이 열려 있는 django 서버가 있습니다.

내 서비스와 컨테이너 환경은 여기 아래에 있습니다.

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의 네임스페이스에 있는 네트워킹. 따라서 각 컨테이너에는 기본적으로 호스트 및 다른 컨테이너와 별도로 자체 루프백 인터페이스가 있습니다. 게시된 포트가 작동하는 것을 포함하여 컨테이너 외부에서 애플리케이션에 연결할 수 있으려면 모든 인터페이스를 수신하도록 애플리케이션을 구성해야 합니다. IPv4에서는 127.0.0.1 대신 0.0.0.0을 수신한다는 의미입니다. 이는 애플리케이션 자체에서 구성해야 하며, docker는 애플리케이션에서 사용하는 포트를 제어하지 않고 해당 포트로만 전달합니다.

관련 정보