【发布时间】:2019-04-13 15:07:10
【问题描述】:
我有一个使用以下 Dockerfile 构建的 React 应用程序
# base image
FROM node:latest as builder
# set working directory
RUN mkdir /usr/src/app
WORKDIR /usr/src/app
# add `/usr/src/app/node_modules/.bin` to $PATH
ENV PATH /usr/src/app/node_modules/.bin:$PATH
# install and cache app dependencies
COPY app/package.json /usr/src/app/package.json
RUN npm install
RUN npm install react-scripts@1.1.1 -g
COPY ./app/usr/src/app
# start app
CMD ["npm", "start"]
# production environment
FROM nginx:alpine
RUN rm -rf /etc/nginx/conf.d
COPY conf /etc/nginx
COPY --from=builder /usr/src/app/build /etc/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
然后我使用以下 Docker Compose 运行它
build: .
labels:
- "traefik.frontend.rule=Host:www.example.com;PathPrefix:/path"
- "traefik.protocol=http"
- "traefik.frontend.entryPoints=https"
- "traefik.port=80"
- "traefik.enable=true"
restart: always
当调用 example.com/path 时,我收到很多 404 错误,因为 React 应用程序不是在寻找路径,而是在 example.com 的根目录中。
该应用程序在没有 PathPrefix 的情况下运行并直接调用 example.com 时处于唤醒状态。
【问题讨论】:
-
最终图像中的
/etc/nginx/html是(或不是)什么?构建器图像中的/usr/src/app/build是(或不是)什么,为什么(或为什么不)? -
在那些文件夹中当然是相同的数据,它是反应构建,里面有什么。所以会有index.html等等
-
我感觉问题出在 React 应用程序如何构建 URL(不是以 /path 为前缀)而不是 traefik 配置。您可以使用 curl 等手动正确访问预期的 /path/ URL吗?
标签: reactjs docker docker-compose react-router traefik