Reactjs 停靠的React应用程序未重新编译代码

Reactjs 停靠的React应用程序未重新编译代码,reactjs,docker,Reactjs,Docker,我正在尝试将通过npx create react应用程序项目名称创建的基本CRA模板Dockerfile化,Dockerfile如下所示: FROM node:latest WORKDIR /usr/src/client COPY ./ ./ RUN npm install EXPOSE 3000 CMD ["npm", "start"] 我通过运行docker build-t containername构建了该映像。 然后用docker ru

我正在尝试将通过npx create react应用程序项目名称创建的基本CRA模板Dockerfile化,Dockerfile如下所示:

FROM node:latest

WORKDIR /usr/src/client

COPY ./ ./

RUN npm install

EXPOSE 3000

CMD ["npm", "start"]
我通过运行docker build-t containername构建了该映像。 然后用docker run-it-p 3000:3000 containername运行它

一切正常,容器运行成功,我可以看到网页在浏览器上运行

这里的问题是网页包热重新加载不起作用,导致应用程序在更改时无法重新编译

同样的问题已经提出了,但遗憾的是没有取得成功。问题似乎出现在Windows用户身上,但就我而言,我使用的是Mac

我已经试过了:

使用CHOKIDAR_USEPOLLING=true更新npm启动脚本 添加EXPOSE 35729,如前所述
非常感谢您的建议,谢谢

我认为webpack服务器没有看到任何新的更改,因为您修改了本地文件,但容器在运行时使用了它的副本,这是在构建时传递的。所以您应该将本地目录装载到容器中

我建议您使用docker compose将工作目录从主机装载到容器:

docker-compose.yml

version: '3.4'
services:
  app:
    build: ./
    volumes:
      - ./src:/usr/src/client
    ports:
      - 3000:3000 # HOST:CONTAINER
    command: npm start


或者在运行命令docker run中使用-v$pwd/src:/app/src…

难以置信的是,问题是由工作目录命名引起的

为了修复它,我只需将它从/usr/src/client更改为/app,然后它开始重新编译,尽管我不知道为什么

FROM node:latest

WORKDIR /app

COPY ./ ./

RUN npm install

EXPOSE 3000

CMD ["npm", "start"]

这就是我真正在做的,相关的node、mongodb和redis服务也在启动-工作方式相同,但react应用程序不会重新编译您的完整运行命令,请更新我的回答谢谢您的回答,你实际上让我注意到我没有为它设置任何卷-我已经尝试使用docker命令,包括-v和直接在客户端根文件夹中设置的docker compose,但仍然没有重新编译它应该可以安装节点,并将其用作具有热重新加载和其他细节的本地开发环境;你不需要像Docker这样的隔离工具。@DavidMaze你能解释一下你的意思吗?为什么会是这样?我的想法是让所有东西都可以通过AWS ECS部署,您可以使用本地节点环境进行开发,将应用程序打包到Docker中,然后使用ECS进行部署。这一切都应该可以使用相同的代码库,在开发应用程序时使用npm run dev之类的工具,并且只有在需要运行集成测试或部署它时才引入Docker。