Nginx dentro del contenedor docker no puede comunicarse con otros contenedores (ejecutando jenkins)

Estoy tratando de configurar un proxy nginx dentro de docker que escuchará el tráfico web y luego, en función de los hosts virtuales, reenviará el tráfico a diferentes instancias de jenkins que también se ejecutan dentro de los contenedores de docker. Para orquestar esto, uso docker-compose.

He logrado:

  • Inicie instancias de Jenkins y hable con ellas directamente
  • Inicie nginx y configúrelo para que actúe como proxy de un servidor web que se ejecuta en otro host

Pero cuando trato de dejar que el servidor nginx enrute el tráfico dentro de la ventana acoplable, no puedo hacer que funcione, solo obtengo errores de puerta de enlace 502-Bag y el seguimiento en los registros de 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 de mi 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

El archivo httpd / Dockerfile se ve así:

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

Y partes relevantes de nginx.conf se ve así (solo proxy de una instancia de 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;        }    }}

He probado las siguientes variantes de la primera URL de proxy_pass (y algunas otras que no recuerdo):

Cuando se ejecuta con --x-networking, cambié las declaraciones de enlace a container_name en docker-compose.yml

Versiones:

  • ventana acoplable: 1.9.1, compilación a34a1d5
  • docker-compose: 1.5.2, compilación 7240ff3
  • SO: Debian 8 (corriendo dentro de Virtualbox)

Estoy borrando mi respuesta anterior, ya que estaba respondiendo algo completamente diferente.Encontré tu problema, es el http://127.0.0.1 y lo que está mal, 127.0.0.1 dentro de la configuración de nginx significa httpd contenedor en este caso no es el host.

Si redefines eso para server_jenkins y clients_jenkins y también sufijo el 8080 puerto para ambos, entonces debería 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;    }}

Además, noté que la directiva http causa errores, pero como mencionaste, el archivo que proporcionaste puede ser solo un fragmento.

Encontré el problema.Estaba confundido sobre cómo funciona el mapeo de puertos.

La configuración de trabajo: 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;        }    }}

IE. No es necesario asignar los puertos.

Proporcione mensajes de error claros. "[…] No puedo hacer que funcione.[…] "no es suficiente en absoluto.

Bueno, obtengo 502-Puerta de enlace incorrecta del servidor nginx cuando voy a localhost: 8080