2014-11-28 2 views
44

나는 boot2docker 1.3.1에서 실행 중입니다.호스트에서 Docker 컨테이너의 웹 서버에 액세스하는 방법

uwsgi --http :8080을 통해 웹 서버를 실행하는 Docker 컨테이너가 있습니다.

컨테이너에 연결하면 lynx http://127.0.0.1:8080을 사용하여 웹 사이트를 탐색 할 수 있으므로 서버가 작동 중임을 알고 있습니다. 내가 http://172.17.0.107:49159로 이동하여 내 호스트에서 해당 웹 사이트에 액세스 할 수 있다고 생각

$ docker ps 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS    PORTS      NAMES 
5248ad86596d  uwsgi_app:0.2  "bash"    11 minutes ago  Up 11 minutes  0.0.0.0:49159->8080/tcp cocky_hypatia 
$ docker inspect --format '{{ .NetworkSettings.IPAddress }}' 5248ad86596d 
172.17.0.107 

: 그것은 다음과 같은 내용을 가지고

$ docker run -itP --expose 8080 uwsgi_app:0.2 

:

나는 내 컨테이너를 달렸다.

이것은 작동하지 않습니다. Chrome에서 '연결 ...'이라는 메시지가 표시되어 어디에도 없습니다.

내가 뭘 잘못하고 있니?

+0

Mac 또는 Windows PC에서 Boot2Docker를 실행하고 있습니까? 나는 '$' – Bryan

+2

맥 덕분에 맥을 추측 할 것이다. 고맙게도 – Anentropic

답변

33

이 좋아, 나 바보, 내가 즉

$ boot2docker ip 
192.168.59.103 
, 오히려 용기의 IP보다는 boot2docker의 VM의 IP 주소를 사용하는 데 필요한 https://docs.docker.com/installation/mac/#container-port-redirection

boot2docker의 문서에서 답을 발견

그리고 내가 호스트에서 어떤 route를 추가 할 필요가 없었다 http://192.168.59.103:49159/

에서 호스트에서 내 사이트를 검색 할 수 있어요

+1

아, -P 옵션을 찾지 못했습니다. – Bryan

+2

제 경우에는'run -p' 옵션으로 포트를 역전 시켰습니다. '-p 80 : 5000'. 이렇게하면 컨테이너 내부의 포트 5000이 로컬 호스트의 포트 80에 매핑됩니다. 나는 그 반대였다. https://docs.docker.com/userguide/usingdocker/을 참조하십시오. – Maxence

+2

문제 해결 후 1 일 후에 내 문제가 해결되었습니다. – David

0

[편집 : 원래 버전은 문제의 -P 무시했다 (어떤이 번호를 변경) 좋은 런이 포트 '게시'로하지 않고

당신이 용기에 도착하려면를 here 통해.

sudo route -n add 172.17.0.0/16 172.16.0.11 

도커 컨테이너가 켜져 있는지 어떻게 버추얼 VM 내부의 개인 네트워크에 행 노선의 맥을 알려줍니다

의 핵심은이 라인입니다.

+0

그 라우트가 나를 위해 고쳐주지 않는다고 덧붙인다. 나는이 IP가'172.16.0.11' 인 것을 궁금해한다. 그것이 컨테이너의 IP 여야합니까? 나는 그것을 시도했지만 그것도 작동하지 않습니다 – Anentropic

+0

전체 기사를 읽었습니까? – Bryan

+0

또는 http : // viget.com/extend/how-to-use-docker-on-os-x-the-missing-guide – Bryan

4

here과 같이 boot2docker 포트 매핑 옵션 -L을 사용할 수 있습니다. 당신이 localhost를 사용하거나 자신의 IP 주소 :

따라서, 귀하의 경우는

boot2docker ssh -L 0.0.0.0:8080:localhost:8080 

다음

docker run -it -p 8080:8080 uwsgi_app:0.2 

그 방법이 될 것입니다, 당신은 boot2docker의 IP 주소를 사용할 필요가 없습니다 (도커 컨테이너는 외부에서 액세스 할 수 있습니다).

89

확장 Anentropic'sanswer : boot2docker은 Mac 및 Windows 용 이전 응용 프로그램 인 docker-machine입니다.그런 다음 시스템 중 하나 (하나 default이라고 기본값)을 선택

$ docker-machine ls 

NAME  ACTIVE DRIVER  STATE  URL       SWARM 
default *  virtualbox Running tcp://192.168.99.100:2376 

과 : 첫째

, 당신의 기계를 나열

$ docker-machine ip default 

192.168.99.100 
+3

해결 된 Windows 문제. –

+16

2016 년에도이 정보가 올바른가요? 'docker ps'가 현재 실행중인 것을 보여 주더라도''docker-machine ls'을 실행 한 결과가 없습니다. – Trejkaz

+0

내 Mac에서도 여전히 작동합니다. 오류 메시지가 없습니까? https://docs.docker.com/docker-for-mac//https://docs.docker.com/docker-for-windows/를 다시 설치하십시오. 이전 버전은 일부 쉘 설정을 https://docs.docker.com/machine/get-started/에서 평가해야했습니다. – HankCa

7

이 컨테이너의 IP 주소를 찾으려면, 당신을 추가 설치가 필요 없음 :

docker inspect <container> 

이것은 풍부한 정보를 제공합니다. IP 주소는 grep입니다.

1

동일한 문제가 있었고 제 경우 AWS EC2 인스턴스를 사용하고있었습니다. 나는 작동하지 않는 컨테이너 IP로 시도하고 있었다. 그런 다음 AWS 호스트의 실제 공개 IP를 IP로 사용했습니다.

+0

OMG. 이것 뒤에 너무 많은 시간을 낭비했습니다. 이 동작의 원인이 무엇인지 궁금합니다. –

0

Boot2docker는 구형이지만 동일한 컨테이너가 Linux에서 작동하더라도 Windows 또는 Mac 용 Docker에서이 문제가 계속 발생할 수 있습니다. 한 가지 증상은 컨테이너 내부의 서버 페이지에 액세스하려고하면 "연결할 수 없습니다."와는 달리 "데이터를 보내지 않았습니다"라는 오류가 발생한다는 것입니다.

그렇다면 Win/Mac의 경우 container host has its own IP이기 때문에 로컬 호스트가 아니기 때문에 Linux에있는 것처럼 로컬 호스트가 아닙니다.

python manage.py runserver 0.0.0.0:8000 

을 양자 택일로, 당신은 반드시 서버가 그러한 nginx를 같은 지역 프록시에서 같은 로컬 요청 (응답 수 있도록해야 할 경우이 같은 모든 IP의 연결을 허용 의미, IP 0.0.0.0에 장고를 실행 해보십시오 , apache 또는 gunicorn)을 사용하면 hostname -i이 반환 한 호스트 IP를 사용할 수 있습니다.

docker run 명령에서 -pport forwarding option을 올바르게 사용하고 있는지 확인하십시오.

모두가 정상이라고 가정하면 호스트 컴퓨터에서 실행되는 브라우저에서 http://localhost으로 서버에 액세스 할 수 있어야합니다. 이번 출시를 들어 로컬 호스트 브라우저

에 아래 명령을 사용하여 컨테이너 응용 프로그램을 호스팅에 문제를 해결하는 방법

0

, 내 경우에는 그것이 있었다 다음 아파치 구성에서

[[email protected] ~]# docker ps -a 
CONTAINER ID  IMAGE    COMMAND    CREATED    STATUS      PORTS    NAMES 
1b81d8a0e3e1  centos:baseweb  "/bin/bash"   8 minutes ago  Exited (0) 24 seconds ago      webtest 
[[email protected] ~]# docker run --name=atul -v /root/dockertest:/var/www/html -i -t -p 5000:8000 centos:baseweb /bin/bash 

:

[[email protected] /]# cd /etc/httpd/conf 
[[email protected] conf]# ll 
total 52 
-rw-r--r--. 1 root root 34419 Sep 19 15:16 httpd.conf 

listner의 포트 8000을 사용하여 파일을 편집하고 Servername 아래의 컨테이너 ip 및 port를 업데이트하십시오.

httpd 서비스를 다시 시작하면 작업이 완료됩니다.

희망 하시겠습니까?

관련 문제