【发布时间】:2020-09-08 07:54:07
【问题描述】:
我正在制作一个 React 前端应用程序,我的目标是使用 Docker 映像提供最终 (npm run build) 版本,其中包含使用我的源代码和 Nginx 进行的多阶段构建。还涉及多个其他 Dockerized 服务,Traefik 充当负载均衡器/转发器/Traefik 所做的任何其他事情。
事情是这样的:当我构建映像时,只要不涉及 Traefik,它就可以正常工作,并且我只是将应用程序转发到我的 docker-compose.yml 文件中的端口,如下所示:
version: '2.4'
services:
ui:
ports:
- someport:80
通过这样做,我发现http://address:someport 提供的应用程序没有问题。
现在我最终要做的是给应用程序一个 PathPrefix,而 Traefik 是一个很好的工具。假设我想最终从http://address/app 找到应用程序。
据我了解,这很容易在 docker-compose.yml 文件中使用标签完成,例如:
version: '2.4'
services:
ui:
ports:
- 80
labels:
- traefik.enable=true
- traefik.http.routers.myapp.rule=PathPrefix("/app")
- traefik.http.routers.myapp.entrypoints=web
如果这些标签不足以实现我想要实现的目标,请通知我!
所以在启动我的应用程序并导航到http://address/app 之后,什么都没有呈现。 重要! -> 通过查看控制台,应用程序似乎正在尝试访问http://address/static/css... 和http://address/static/js... 源文件,但没有找到它们。这些地址后面没有任何内容,但是通过在http://address/app/static... 之间添加/app,可以像预期的那样找到源文件。如何让我的应用程序执行此操作?
这是 Traefik 问题还是 Nginx 问题,或者可能与 npm 有关,我认为这不太可能?
Dockerfile 有点像:
# build env
FROM node:13.12.0-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package*.json ./
RUN npm ci
COPY . ./
RUN npm run build
# production env
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
【问题讨论】:
标签: node.js docker nginx traefik