2015-01-22 10 views
1

나는 Docker를 처음 사용합니다. VM 사고 방식으로 접근하기 시작했지만, VM이나 전통적인 LXC 컨테이너와 완전히 다른 패러다임을 사용한다는 것을 알고 있습니다.단일 호스트 이름 뒤에 도커 컨테이너를 숨기는 방법

가장 큰 문제는 네트워킹의 작동 방식을 이해하는 데있었습니다. Docker를 사용하여 포트 충돌을 피하기 위해 동일한 포트 중 일부가 필요한 시스템에서 여러 서비스를 실행하려고합니다.

DNS에 컨테이너 FQDN을 추가하는 것에 대해 걱정할 필요없이 호스트 컴퓨터의 FQDN을 사용하여 모든 호스트에 액세스하려고합니다. 관련 컨테이너 포트를 사용되지 않는 호스트 포트로 전달하고 있습니다.

문제는 브라우저에서 서비스에 액세스하려고 할 때 해결할 수없는 컨테이너의 FQDN으로 리디렉션된다는 것입니다. 결과는 "서버를 찾을 수 없음"오류입니다.

컨테이너의 FQDN을 해결할 필요없이 호스트의 FQDN 뒤에있는 모든 컨테이너를 숨길 수있는 방법이 있습니까?

+1

[프록시] (http://stackoverflow.com/questions/27828699/multiple-docker-containers-as-web-server-on-a-single-ip/27828950#27828950)을 고려해 보셨습니까? –

+0

호스트 (CentOS 7)에서 실행중인 Apache 역 프록시를 사용해 보았습니다. 아마 내가 잘못 구성했지만 작동하지 않습니다. 여전히 컨테이너 호스트 이름으로 리디렉션됩니다. 내 이해 "ProxyPassReverse http : // : "브라우저에서 표시되는 리디렉션을 방지해야하지만 거기에 컨테이너의 주소가 표시됩니다. 또한 컨테이너에 고정 주소를 지정하는 방법이없는 것 같아서 프록시를 구성하기가 어렵습니다. – orodbhen

답변

1

각 도커 컨테이너를 다른 외부 포트로 사용할 수 있으며 nginx 또는 apache와 같은 서버 도커를 사용하여 요청을 프록시 할 수 있습니다. 한 호스트 이름으로 모든 것을 가져간 다음 모든 트래픽을 적절한 컨테이너와 포트로 전달하는 이와 같은 것을 구축해야했습니다.

docker 컨테이너가 생성 될 때마다 새로운 주소를 갖는 것이 어렵습니다. 시작할 때 주소를 동적으로 파악하고 프록시 컨테이너가 마지막으로 해당 주소로 시작하도록 할 수 있습니다. 이러한 주소를 얻을 수있는 방법은 원하는 데이터를 '도커 검사'및 awk로 사용하거나 docker-py와 같은 라이브러리 중 하나를 사용하여 관련 데이터를 가져올 수 있습니다.

+1

매번 IP를 알아내는 것 외에도 이것을 관리하는 좀 더 우아한 방법이있는 것 같습니다. 루프백 IP를 컨테이너의 노출 된 포트에 바인딩하는 방법을 생각했습니다. 그런 다음 Apache 또는 Nginx가 요청을이 주소로 전달할 수 있습니다. 이것이 "의미있는"방법이어야합니다. – orodbhen

+0

대답은 [여기] (https://docs.docker.com/userguide/dockerlinks/) 인 것 같습니다. 나는 전통적인 네트워킹 방법을 사용하여 간단한 해결책을 원했다. 그러나 그것은 내가 많은 독서를해야 할 것 인 것처럼 보인다 :). – orodbhen

+0

다른 컨테이너에서 컨테이너에 액세스하려는 경우 연결이 올바른 대답입니다. --link memcached1 : mc는 시작하려는 도커 컨테이너 안에있는 memcached1이라는 이름의 컨테이너를 호스트 이름 'mc'에 연결합니다. – jchysk