【问题标题】:Docker with create react app is not updating changes具有创建反应应用程序的 Docker 未更新更改
【发布时间】:2022-01-26 00:06:50
【问题描述】:

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

dockerfile

# 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"
    ]
  }
}

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

【问题讨论】:

  • “除了应用程序没有更新更改”你是什么意思。什么变化,在哪里做出的?应用应该如何更改为什么操作。
  • 我的意思是,当我对代码进行更改时,浏览器应该会自动更新更改,但它不会。我认为这叫做热重载。
  • 我不太确定容器是否可行。例如,当您处理 java 和 IntelliJ 并且您让服务器在本地运行时,我知道它是可能的。但我从未见过有人在使用容器技术时让它工作。据我所知,您正在尝试使用卷,但是一旦重建,应用程序文件可能会在本地刷新,但卷仍然相同。
  • spa 热重载功能适用于开发阶段而不是生产阶段。与我们分享 package.json
  • 我通常直接使用 Node 进行这种开发,而不是试图让 Docker 相信它想要摆脱其正常的文件系统隔离。这种设置并没有真正使用 Docker 的任何功能(您没有不可变的可复制映像,前端应用程序无法使用 Docker 网络),并且不清楚您从 Docker 获得什么好处。

标签: node.js reactjs docker wsl-2


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2020-12-29
    • 2020-03-05
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多