Назад | Перейти на главную страницу

Использование nginx с обратным прокси в контейнере докеров не работает

Я хочу все, начиная с /api быть направленным к http://localhost:3007

Это мой 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/*;
}

Он работает, когда я запускаю его локально на своем Mac. Но не работает, когда запускаю в докер-контейнере.

Это мой докер-файл:

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

Это мой docker-compose:

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

Ошибка, которую я получаю от 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"

Скорее всего, вы не хотите localhost:3007 но что-то вроде api-upstream-server:3007 - отдельный контейнер, в котором запускается код сервера приложений и открывается порт 3007.

Внутри контейнера localhost это контейнер, а не хост-машина. Docker изолирует контейнер от хост-узла.

Но обратите внимание, вам, вероятно, придется запускать все остальное (базу данных и т. Д.) В контейнерах докеров.