Я пытаюсь использовать express.js и nginx в качестве обратного прокси-сервера с Docker. Экспресс-приложение отлично работает с докером само по себе, но когда я добавляю nginx, я получаю ответ 502. Он печатает это:
nginx_1 | 30.03.2019 21:14:04 [ошибка] 6#6: *3 connect() не удалось (111: Отказано в соединении) при подключении к восходящему каналу, клиент: 172.20.0.1, сервер: localhost, запрос: «GET/HTTP /1.1", восходящий поток: "http://127.0.0.1:20000/", хост: "localhost:21000"
docker-compose.yml
version: '3.3'
services:
app:
image: node:latest
volumes:
- ./app:/usr/src/service/app
working_dir: /usr/src/service/app
command: ["node", "app"]
ports:
- 20000:18000
nginx:
image: nginx:latest
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/error.log:/etc/nginx/error_log.log
- ./nginx/cache/:/etc/nginx/cache
ports:
- 21000:80
nginx.conf
events {
}
http {
upstream upstream_server {
server localhost:20000;
}
server {
listen 127.0.0.1;
listen 80;
server_name localhost;
location / {
proxy_set_header Host $http_host;
proxy_redirect off;
proxy_pass http://upstream_server;
break;
}
}
}


Ваш контейнер nginx и контейнер приложения находятся в одной сети, но не на одном хосте, поэтому localhost не там, где вы найдете свое приложение.
Попробуйте app в качестве параметра server в восходящем потоке — это должно разрешить IP-адрес контейнера app в сети компоновки.