2015-01-19 6 views
15

두 개의 도킹 컨테이너에 nginx가 있습니다. container1은 container2에 연결됩니다. 내가 컨테이너 2에서 container1을를 Ping 할 수nginx proxy_pass 연결된 도커 컨테이너

server { 
    location ~ ^/some_url/(.*)$ { 
     proxy_pass http://container1/$1; 
    } 
} 

하지만, nginx를 그것을 해결할 수 : 고정 표시기는 내가 지금처럼의 nginx 구성에 입력 /etc/hosts 파일에 항목을 추가

* 1 정의 된 해결은 어떻게 anothe에 요청을 proxy_pass 수 container1을

가 해결되지하기 r 도커 컨테이너?

당신은 당신의 해결로 사용하여/etc/hosts 파일에 대한이 답변에서 살펴 보셔야합니다
+0

수 호스트 파일을 공유합니까? 두 컨테이너를 어떻게 연결 했습니까? (링크의 이름은 무엇입니까?) 또한 잡았다 : 컨테이너 중 하나를 rm'd 나중에 다시 시작하면 IP가 변경됩니다 (호스트가 업데이트되지 않음) – wpp

+0

방금 ​​너와 비슷한 구성을 시도했는데 성공했습니다. 'nginx : 1.7.9'로 나에게 잘 해줘. * container2 *와 curl * container1 *에서 bash를 시작할 수 있습니까? container1과 2 모두 동일한 구성을 사용하고 있지 않습니까? –

+0

@MykolaGurov ping과 curl을 할 수 있고 container2의 container1을 사용할 수 없습니다. 내 문제는 그 nginx 그것을 해결할 수없는 것 같습니다. 나도 같은 구성을 사용하지 않을거야, 아니 (만약 당신이 nginx 구성을 말하는거야). –

답변

5

: Using /etc/hosts as resolver for url rewriting

기본적으로, 당신의 DNS 또는 확인자가 조회시 이름을 확인하기 위해/etc/hosts 파일을 사용하지 않지만 당신이 할 수있는 dnsmasq을 설치하고 확인자로 127.0.0.1을 사용하여이 문제를 해결하십시오. 당신은 당신의 nginx의 설정에서 직접 해결로 127.0.0.1을 추가 할 수 있습니다

server { 
    location ~ ^/some_url/(.*)$ { 
     resolver 127.0.0.1; 
     proxy_pass http://container1/$1; 
    } 
} 
+0

그건 제가 실제로 시도한 것이지만, dnsmasq는 에러없이 시작하지 않았기 때문에 포기했습니다. 어쩌면 너무 빨리. 다시 시도하고 알려 드리겠습니다. –

+0

다시 시도해 보았습니다. 간단히 dnsmasq를 내 진입 점에 추가했습니다. VM 내에서 컨테이너를 실행하는 경우 dnsmasq을 루트로 실행하십시오. 그렇지 않으면 작동하지 않습니다. –

25

대신 컨테이너 이름의 상류 블록을 사용하여 직접

upstream backend { 
    server container1; 
} 
server { 
    location ~ ^/some_url/(.*)$ { 
     proxy_pass http://backend/$1; 
    } 
} 

이 정상적인 이름 확인 방법을 제공 발생하는 것을 허용한다 nginx와 도커 링크를 쉽게 사용할 수 있습니다.

+0

외부 의존성에 대해 혼란에 빠지기를 원치 않을 때 가장 잘 대답합니다. –

+3

이 솔루션에서 내가 가진 문제점은 nginx 컨테이너를 시작하기 전에'container1'이 실행되고 있어야한다는 것입니다. 그렇지 않으면 시작되지 않습니다 –

+1

백엔드가 가동 될 때까지 대기하는 스크립트를 작성하십시오. 이런 식으로 뭔가를해야한다 : 'bash -c'while while! curl -s container1 : 8080>/dev/null; container1을 기다리는 echo를 실행한다; sleep 3; done; start_nginx.sh "''start_nginx.sh'는 실제로 nginx 서비스. – threejeez

14

당신은 임베디드 부두 노동자의 DNS 서비스를 사용, 활성화 된 경우, 컨테이너 해결 프로그램을 확인할 수 있습니다 :

cat /etc/resolv.conf 

가되어야한다

nameserver 127.0.0.11 

사용 리졸버 등이 IP :

server { 
    location ~ ^/some_url/(.*)$ { 
     resolver 127.0.0.11; 
     proxy_pass http://container1/$1; 
    } } 
+1

왜 나는 아무도 이것을 upvoted 궁금해. 주의해야 할 점이 있습니까? – activatedgeek

+1

흠, 아마 하드 코딩 된 IP 127.0.0.11에 약간의 문제가 발생할 수 있습니다. –

+0

나는 그렇다고 생각합니다. 이상적인 방법은 nameserver IP를위한'etc/resolv.conf'를 분석하는 것입니다. – activatedgeek