Мое приложение веб-интерфейса находится за NGINX, которое обслуживает стандартные файлы c интерфейса (записанные в Angular) в контейнере docker, порт связи - 80:80.
Моим бэкэнд-приложением является Nest JS, которое обслуживает данные на порте localhost: 3000 в другом docker контейнере.
Запуск приложения с docker -созданием, но мой интерфейс не может достичь бэкэнда - получить 502, плохой GW.
Проблема вызвана настройкой nginx или docker -compose.yml или обоих?
Внешний интерфейс Dockerfile:
FROM node:latest AS builder
WORKDIR /app
COPY . .
ARG configuration=production
RUN npm install && npm run build.prod
FROM nginx:latest
LABEL version="1.0"
COPY nginx.conf /etc/nginx/nginx.conf
WORKDIR /usr/share/nginx/html
COPY --from=builder /app/dist/frontend/ .
Бэкэнд Dockerfile:
FROM node:10 AS builder
WORKDIR /app
COPY ./package.json ./
RUN npm install
COPY . .
RUN npm run build
ADD . /app
EXPOSE 3000
CMD ["npm", "run", "start:prod"]
NGINX .conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
server {
listen 80;
server_name localhost;
root /usr/share/nginx/html;
index index.html index.htm;
include /etc/nginx/mime.types;
gzip on;
gzip_min_length 1000;
gzip_proxied expired no-cache no-store private auth;
gzip_types text/plain text/css application/json application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript;
location / {
try_files $uri $uri/ /index.html;
}
location /api {
proxy_pass http://127.0.0.1:3000;
}
location ~ \.html$ {
add_header Cache-Control "private, no-cache, no-store, must-revalidate";
add_header Expires "Sat, 01 Jan 2000 00:00:00 GMT";
add_header Pragma no-cache;
}
}
}
docker -compose.yml
version: '3'
services:
angular:
image: "docker-frontend:v3"
container_name: "frontend"
ports:
- "80:80"
links:
- restapi
restapi:
image: "docker-backend:v1"
container_name: "backend"
expose:
- 3000
ports:
- "3000:3000"