Usando nginx com proxy reverso no contêiner docker não funcionando

1

Eu quero que tudo começando com /api seja direcionado para http://localhost:3007

Este é o meu nginx.conf

user nginx;
worker_processes  1;

daemon off;

events {
    worker_connections 1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;


    server {
        listen       80;
        server_name  localhost;

        location / {
            root   /usr/html;
            index  index.html index.htm;
        }

        location /api {
            proxy_pass http://localhost:3007;
            proxy_read_timeout 5m;
        }

        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    include servers/*;
}

Funciona quando eu o executo localmente no meu mac. Mas não está funcionando quando eu o executo em um contêiner de encaixe.

Este é o meu arquivo docker:

FROM smebberson/alpine-nginx:latest
COPY /dist /usr/html/
COPY nginx.conf /etc/nginx/nginx.conf

Este é o meu docker-compose:

version: "2"
services:
  web:
    build: .
    ports:
     - "80:80"

O erro que estou recebendo do nginx:

2017/06/28 13:06:51 [error] 200#0: *9 connect() failed (111: Connection refused) while connecting to upstream, client: 172.19.0.1, server: localhost, request: "GET /api HTTP/1.1", upstream: "http://127.0.0.1:3007/api", host: "localhost"
    
por Joe 28.06.2017 / 15:07

1 resposta

0

Provavelmente, você não deseja localhost:3007 , mas algo como api-upstream-server:3007 - um contêiner separado executando o código do servidor de aplicativos e expondo a porta 3007.

Dentro do contêiner, localhost é o contêiner, não a máquina host. O Docker isola o contêiner do nó do host.

Mas observe que provavelmente você terá que executar todo o resto (banco de dados, etc.) em contêineres do docker também.

    
por 03.07.2017 / 20:40