Nginx dentro do contêiner docker não pode falar com outros contêineres (executando jenkins)

Estou tentando configurar um proxy nginx dentro do docker que ouvirá o tráfego da web e, em seguida, com base no tráfego de encaminhamento do virtualhosts para instâncias do differerat jenkins também em execução dentro dos contêineres do docker. Para orquestrar isso, Uso docker-compose.

Eu consegui:

  • Inicie instâncias do jenkins e converse com elas diretamente
  • Inicie o nginx e configure-o para atuar como um proxy para um servidor web em execução em outro host

Mas quando tento deixar o servidor nginx rotear o tráfego dentro do docker, não consigo fazê-lo funcionar, apenas obtendo erros de Gateway de 502 Bag e o folowing nos logs do nginx:

[error] 6#6: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.0.1, server: , request: "GET / HTTP/1.1", upstream: "http://127.0.0.1:8081/", host: "localhost:8080"

Partes relevantes do meu docker-compose.yml:

httpd:  build: httpd  ports:      - "8080:8080"  links:      - "server_jenkins"      - "clients_jenkins"  restart: alwaysserver_jenkins:  image: jenkins  ports:      - "8081:8080"  restart: alwaysclients_jenkins:  image: jenkins  ports:      - "8082:8080"  restart: always

O httpd / Dockerfile se parece com isso:

FROM nginxRUN rm -rf /etc/nginxCOPY config /etc/nginx/

E partes relevantes do nginx.conf se parece com isso (apenas proxy de uma instância do jenkins):

http {    server {        listen       8080;        server_name server.build.example.com;        root /tmp;        location / {            proxy_pass   http://127.0.0.1:8081;        }    }    server {        listen       8080;        server_name clients.build.example.com;        root /tmp;        location / {            proxy_pass   http://127.0.0.1:8082;        }    }}

Tentei as seguintes variantes do primeiro url proxy_pass (e algumas outras que não me lembro):

Ao executar com -- X-networking, mudei as instruções de link para container_name em docker-compose.yml

Versao:

  • docker: 1.9.1, construir a34a1d5
  • docker-compose: 1.5.2, construir 7240ff3
  • Sistema operacional: Debian 8 (rodando dentro do Virtualbox)

Estou excluindo minha resposta anterior, pois estava respondendo a algo completamente diferente.Eu encontrei o seu problema, é o http://127.0.0.1 e portas que está errado, 127.0.0.1 dentro do conf do nginx significa o httpd recipiente em si, neste caso, não o host.

Se você redefinir isso para server_jenkins e clients_jenkins e também sufixo o 8080 porta para ambos, então deve funcionar.

server {    listen       8080;    server_name server.build.example.com;    root /tmp;    location / {        proxy_pass   http://server_jenkins:8080;    }}server {    listen       8080;    server_name clients.build.example.com;    root /tmp;    location / {        proxy_pass   http://clients_jenkins:8080;    }}

Além disso, notei que a diretiva http causa erros, mas como você mencionou, o arquivo fornecido pode ser apenas um trecho.

Encontrei o problema.Fiquei confuso sobre como o portmapping funciona.

A configuração de trabalho: docker-compose.yml:

httpd:  build: httpd  ports:      - "8080:8080"  links:      - "server_jenkins"      - "clients_jenkins"  restart: alwaysserver_jenkins:  image: jenkins  restart: alwaysclients_jenkins:  image: jenkins  restart: always

nginx.conf:

http {    server {        listen       8080;        server_name server.build.example.com;        root /tmp;        location / {            proxy_pass   http://server_jenkins:8080;        }    }    server {        listen       8080;        server_name clients.build.example.com;        root /tmp;        location / {            proxy_pass   http://client_jenkins:8080;        }    }}

Ou seja. Não há necessidade de mapear as portas.

Forneça mensagens de erro claras. "[…] Eu não consigo fazê-lo funcionar.[…] "não é suficiente.

Bem, recebo Gateway 502-Bad do servidor nginx quando vou para localhost: 8080