我的反应 docker 网页没有绑定到主机

My react docker webpage does not bind to the host

我有一个 React 应用程序,我可以通过 运行ning "npm 运行 start" 在 VM 上完美 运行 它而无需 docker。但是,当我在 docker 图片和 运行 docker 它没有出现..我的 docker 文件如下:

FROM node:12
USER root
RUN mkdir -p /var/tmp/thermo && chown -R root:root /var/tmp/thermo
WORKDIR /var/tmp/thermo
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD [ "npm", "run","start"]

我可以成功创建 docker 图像,然后 运行 它,

docker run -d -p 3000:3000 --name thermo-*** thermo-***

但是容器总是退出,容器日志如下:

[root@*****]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
03701ed96bca        thermo-api          "docker-entrypoint.s…"   17 minutes ago      Exited (0) 17 minutes ago                       thermo-api-app
[root@t****]#
[root@****]# docker logs 03701ed96bca

> material-kit-pro-react@1.9.0 start /var/tmp/thermo
> export PORT=3000 && react-scripts start

ℹ 「wds」: Project is running at http://172.17.0.2/
ℹ 「wds」: webpack output is served from
ℹ 「wds」: Content not from webpack is served from /var/tmp/thermo/public
ℹ 「wds」: 404s will fallback to /
Starting the development server..

然后当我 curl 访问我的网站时(“curl localhost:3000”)没有弹出任何内容, 我不确定我哪里做错了?如有任何帮助,我们将不胜感激!

再看看你的代码,启动容器后容器立即退出。 顺便说一下,npm run start 只是用于开发环境,你为什么不构建代码并由 Nginx

提供服务呢?

我的意见是您应该构建您的代码,然后以您的方式使用 Dockerfile 示例,Nginx 将为您的应用程序提供服务

Docker 文件

# build environment
FROM node:lts-alpine as build
WORKDIR /app
ENV PATH /app/node_modules/.bin:$PATH
COPY package.json /app/package.json
RUN npm install
COPY . /app
RUN npm run build
RUN react-scripts build

# production environment
FROM nginx:stable-alpine
COPY --from=build /app/build /usr/share/nginx/html
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

你可以使用这个nginx.conf

server {
    listen       80;
    server_name  localhost;
    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }
    location /web {
            alias   /usr/share/nginx/html;
            index  index.html index.htm;
    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}