Docker 使用 create react app 未更新更改

Docker with create react app is not updating changes

我正在使用 WSL2 中的 docker 和 create-react-app 创建一个 React 应用程序,一切似乎都运行良好,除了该应用程序没有随着代码的更改而更新。我的意思是,当我更改代码时,浏览器应该会自动更新更改,但事实并非如此,我必须重新启动容器才能看到它们。我在 ENV 中添加了 CHOKIDAR_USEPOLLING=true 但它也不起作用。这些是配置文件:

docker文件

# pull official base image
FROM node:16.13.1

# set working directory
WORKDIR /app

# add `/app/node_modules/.bin` to $PATH
ENV PATH /app/node_modules/.bin:$PATH

# install app dependencies

COPY package.json ./
COPY package-lock.json ./
RUN npm install

# add app
COPY . ./

# start app
CMD ["npm", "start"]

docker-compose.yml

services:
  react:
    build: ./frontend
    command: npm start
    ports:
      - 3000:3000
    volumes: 
      - ./frontend:/app
      - '/app/node_modules'
    env_file:
      - 'env.react'

env.react

CHOKIDAR_USEPOLLING=true

package.json

{
  "name": "app",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "@testing-library/jest-dom": "^5.16.1",
    "@testing-library/react": "^12.1.2",
    "@testing-library/user-event": "^13.5.0",
    "mdbreact": "^5.2.0",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "react-painter": "^0.4.0",
    "react-router-dom": "^6.2.1",
    "react-scripts": "5.0.0",
    "sass": "^1.45.1",
    "web-vitals": "^2.1.2"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      ">0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}

你能看出我做错了什么吗?谢谢!

问题出在 WSL2 上,正如这个回答 www.github.com/microsoft/WSL/issues/6255#issuecomment-730701001 中所说:“如果它在 Windows 文件系统中,我相信您 运行 了解事实WSL 2 中的 Plan 9 服务器不支持监视 Windows 文件。作为解决方法,我建议您将文件放入 Linux 文件系统”。我将文件移动到 \\wsl$\Ubuntu\home\user,现在重新加载工作正常。我也停止将 Docker 与 React 一起使用,现在我直接使用 Node,正如评论中所推荐的那样。

请注意,我在单独使用 Node 时遇到了同样的问题,文件在 Linux 文件系统之外。

添加这个环境变量:

environment:
      - CHOKIDAR_USEPOLLING=true