2016-06-03 4 views
1

안녕하세요. 도움이되는 개발자,도커 컨테이너 연결

도커 컨테이너를 연결하는 데 문제가 있습니다. Subversion 도커 컨테이너와 몽고 도커 컨테이너를 만들었습니다.

고정 표시기 실행 -d -p 3343 : -p 4434 3343 : 4434 -p 18080 : 18080 --name SVN 서버 mamohr/전복 첨단

고정 표시기 실행 -p 27017 : 27017 --name 내 - mongo -d mongo

브라우저에서 http://x.x.x.x:18080/을 눌렀지만 my-mongo 인스턴스에서 말릴 수 없습니다. 개발 기계에서 각 컨테이너에 대해 이야기 할 수는 있지만 컨테이너에서 컨테이너로는 말할 수 없습니다.

- net = bridge, host, ????, 같은 것을 볼 수 있지만 혼란스러워지고 있습니다.

도와주세요 .....

답변

0

은 즉시, 당신은 용기와 호스트 모두 통신 할 수 --net = 호스트와 후와 호스트를 시작할 수 있습니다 가야합니다. 또는 mongo와 다른 컨테이너 사이에 link (--link)를 사용할 수 있습니다.

도커 네트워킹에 대해 설명해야 할 것이 많고 도커 문서가 시작하는 것이 좋은 시점입니다.

내가 고정 표시기 작성을 살펴보고 당신을 조언 할 https://docs.docker.com/engine/userguide/networking/dockernetworks/

+0

- net = host는 신중히 사용해야하며 여기에서 정답이 아닙니다. – johnharris85

+0

예, 생산 중 --net = 호스트가 이상적이지 않습니다. 그러나 개발 기계에서, 도킹되지 않았고 앱을 실행하기 위해 직접 액세스해야하는 의존적 인 서비스가있을 수있는 IMO는 괜찮습니다. 예 : DB의 로컬 인스턴스를 실행 중 – Shibashis

+0

OP의 DB가 컨테이너에 있습니다. – johnharris85

0

의 설명서를 참조하십시오. 많은 컨테이너로 구성된 시스템을 관리하는 가장 좋은 방법이라고 생각합니다. 브리지 네트워크에 연결된 기본 시작으로 https://docs.docker.com/compose/

0

도커 용기가 default 전화 :

다음은 공식 가이드입니다. docker network ls을 수행하고 사용 가능한 네트워크를 확인할 수 있습니다. 또한 create networks with different attributes etc...

귀하의 경우 두 콘테이너 모두 동일한 default 네트워크에서 시작할 수 있습니다. 즉, 서로 통신 할 수 있어야합니다. 사실 SVN 서버가 몽고와 대화 할 수 있기를 원한다면 (그리고 호스트로부터 몽고에 연결할 필요도 없음) 몽고 컨테이너의 포트를 노출 할 필요조차 없습니다. 같은 네트워크에있는 컨테이너는 포트가 노출되지 않고도 서로 잘 통신 할 수 있습니다. 포트 노출은 호스트> 컨테이너 연결을 허용하는 것입니다.

그래서 mongo 인스턴스에서 SVN 인스턴스로 컬링하려고 할 때 어떤 호스트 이름/포트를 사용하고 있습니까? svn-server을 사용하여 SVN 컨테이너로 확인해야합니다 (Docker의 기본 제공 DNS 확인 사용). SDN hub에서이 스키마를 대출

+0

호스트에 연결할 수없는 mongo 컨테이너에서 dockerHost : 18080을 컬링하려고합니다. 그래서 svn-server : 18080 – user3066155

+0

컬링해야합니다. 맞습니다. – johnharris85

0

, C1이 SVN 컨테이너입니다 상상과 C2는 몽고의 컨테이너입니다 :

Docker network

모두 용기 외부 192.168.50.16 네트워크에 docker0 다리와 신도에 연결되어 있습니다.컨테이너 네트워킹

curl http://172.17.0.19:18080/ 
+1

'docker0'보다는 사용자 정의 브릿지를 사용할 경우 컨테이너 이름을 사용하여 IP를 해결할 수 있습니다. – Matt

0

직접 컨테이너를 통해 : 그것은 bridge0 IP 주소의에

# docker inspect <svn-container-name> 

     "Networks": { 
      "bridge0": { 
       "IPAddress": "172.17.0.19", 
      } 

본 뒤 말림 :

당신의 몽고 컨테이너에서 연결하려면 SVN 컨테이너의 bridge0 IP 주소를 확인 컨테이너 이름은 user defined network으로 얻을 수 있습니다.

docker network create mynet 
docker run -d --net=mynet --name svn-server mamohr/subversion-edge 
docker run -d --net=mynet --name my-mongo mongo 

docker exec <svn-id> ping my-mongo 
docker exec <mongo-id> ping svn-server 

현재 설정에서도 매핑 된 포트에 항상 연결할 수 있어야합니다. 호스트는 해당 포트에서 수신 대기하는 프로세스를 실행하여 모든 호스트 IP가 수행해야합니다.

$ docker run -d -p 8080:80 --net=mynet --name sleep busybox nc -lp 80 -e echo here! 
63115ef88664f1186ea012e41138747725790383c741c12ca8675c3058383e68 
$ ss -lntp | grep 8080 
LISTEN  0  128      :::8080     :::*  users:(("exe",pid=6287,fd=4)) 
$ docker run busybox nc <any_host_ip> 8080 
here!