2016-09-29 4 views
2

Docker 컨테이너 내에서 gunicorn을 실행 중입니다. 나는 그걸로 sshing하고 localhost : 8000/docker 컨테이너의 것들을 나에게 원하는 응답을 제공하기 때문에 작동하지만, 나는 항해자가 포트가 매핑되었음을 알면서도 불구하고 내 호스트에서이를 도달 ​​할 수 없다. 뭐라 구요?Docker가 Gargicorn을 사용하여 포트를 매핑하지 않습니다.

내가

docker run -d -p 80:8000 myapp:version1.1 /bin/bash -c 'gunicorn things:app' 

docker ps 나에게 나의 호스트에서

CONTAINER ID  IMAGE      COMMAND     CREATED    STATUS    PORTS       NAMES 
614df1f2708e  myapp:version1.1 "/bin/bash -c 'gunico" 6 minutes ago  Up 6 minutes  5000/tcp, 0.0.0.0:80->8000/tcp evil_stallman 

을 제공

를 실행, 컬링 locahost은/가지, 그러나 나에게

curl: (52) Empty reply from server 

을 제공합니다 때 docker exec -t -i 614df1f2708e /bin/bash 다음 curl localhost:8000/things, I 성공적으로 올바른 응답을 얻습니다.

docker가 내 포트 8000을 올바르게 매핑하지 않는 이유는 무엇입니까?

+0

Mac에 있습니까? – Matt

+0

예 Mac 용 도커를 사용 중입니다. P – 1N5818

+0

내가 틀렸다면 누군가 나를 교정 해주세요. Mac이 기본적으로 docker를 지원하지 않지만 docker를 지원하는 VM에서 docker 컴퓨터를 실행해야한다고 생각합니다. . 그래서 당신은 localhost가 아닌 VM의 IP/hostname에서 컬을 할 필요가 있습니다. – CivFan

답변

5

포트를 게시 할 때 Docker는 요청을 컨테이너로 전달하지만 컨테이너는 요청을 수신 대기해야합니다. 컨테이너에는 Docker 네트워크의 IP 주소가 있으며 앱이 해당 주소로 수신 대기해야합니다.

Check your gunicorn bind setting - 수신자가 127.0.0.1:8000 인 경우 컨테이너의 IP 주소에 바인딩되지 않으며 외부에서 요청을받지 않습니다. 0.0.0.0:8000은 모든 주소에 바인딩되므로 안전합니다.

관련 문제