Я пытаюсь создать docker-compose, используя две службы: бэкэнд Spring Boot (работает на порте 8080) и интерфейс React, работающий на Nginx.
Реагирующее приложение вызывает backend API, например / api / tests.Тем не менее, когда я запускаю docker compose и frontend делает запрос, он всегда завершается с ошибкой 404: GET http://localhost/api/tests 404 (Not Found)
Когда я устанавливаю dockerfile frontend, чтобы он не использовал Nginx, просто npm start
, он работал нормально,но я бы предпочел использовать производственную сборку на Nginx.
Текущий файл докера внешнего интерфейса:
FROM node:11.13 as builder
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
ENV PATH /usr/src/app/node_modules/.bin:$PATH
COPY package.json /usr/src/app/package.json
RUN npm install
RUN npm install react-scripts@2.1.8 -g
COPY ./package-lock.json /usr/src/app/
COPY ./public /usr/src/app/public
COPY ./src /usr/src/app/src
COPY ./nginx.conf /etc/nginx/nginx.conf
RUN npm run build
FROM nginx:1.15.10-alpine
COPY --from=builder /usr/src/app/build /usr/share/nginx/html
CMD ["nginx", "-g", "daemon off;"]
Nginx.conf:
server {
listen 80;
location / {
try_files $uri $uri/ /index.html;
add_header Cache-Control public;
expires 1d;
}
location /api {
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://server:8080/;
}
}
docker-compose:
version: "3"
services:
server:
build: test-server/
expose:
- 8080
ports:
- 8080:8080
ui:
build: test-ui/
expose:
- 80
ports:
- 80:80
Реактивное приложение имеет в своем файле package.json строку "proxy": "http://server:8080"
.
Nginx регистрирует следующую ошибку:
2019/04/15 12:50:03 [error] 6#6: *1 open() "/usr/share/nginx/html/api/tests" failed (2: No such file or directory), client: 172.20.0.1, server: localhost, request: "GET /api/tests HTTP/1.1", host: "localhost", referrer: "http://localhost/"