如何解决在Kubernetes上运行时出现的错误:找不到模块'react-dev-utils/chalk'?

4
请不要将此标记为重复。我知道我之前已经问过这个问题,但我的问题没有解决。
我已经尝试在构建镜像之前在dockerfile中添加“RUN npm install --save-dev react-dev-utils”,但它并没有解决问题。
容器的日志记录。
> wootz@0.1.0 start /usr/src/app
> node scripts/start.js

internal/modules/cjs/loader.js:626
    throw err;
    ^

Error: Cannot find module 'react-dev-utils/chalk'
Require stack:
- /usr/src/app/scripts/start.js
    at Function.Module._resolveFilename (internal/modules/cjs/loader.js:623:15)
    at Function.Module._load (internal/modules/cjs/loader.js:527:27)
    at Module.require (internal/modules/cjs/loader.js:681:19)
    at require (internal/modules/cjs/helpers.js:16:16)
    at Object.<anonymous> (/usr/src/app/scripts/start.js:19:15)
    at Module._compile (internal/modules/cjs/loader.js:774:30)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:785:10)
    at Module.load (internal/modules/cjs/loader.js:641:32)
    at Function.Module._load (internal/modules/cjs/loader.js:556:12)
    at Function.Module.runMain (internal/modules/cjs/loader.js:837:10) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [ '/usr/src/app/scripts/start.js' ]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! wootz@0.1.0 start: `node scripts/start.js`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the wootz@0.1.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional log                                                                                                                                                             ging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-06-17T15_56_02_649Z-debug.log

uipersistantvolume

kind: PersistentVolume
apiVersion: v1
metadata:
  name: ui-initdb-pv-volume
  labels:
    type: local
    app: ui
spec:
  storageClassName: manual
  capacity:
    storage: 1Mi
  accessModes:
    - ReadOnlyMany
  hostPath:
    path: "/home/vignesh/pagedesigneryamls/client"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ui-initdb-pv-claim-one
  labels:
    app: ui
spec:
  storageClassName: manual
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 1Mi

UI 持久卷二

kind: PersistentVolume
apiVersion: v1
metadata:
  name: ui-initdb-pv-volume-two
  labels:
    type: local
    app: ui
spec:
  storageClassName: manual
  capacity:
    storage: 1Mi
  accessModes:
    - ReadOnlyMany
  hostPath:
    path: "/home/vignesh/pagedesigneryamls/client"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: ui-initdb-pv-claim-two
  labels:
    app: ui
spec:
  storageClassName: manual
  accessModes:
    - ReadOnlyMany
  resources:
    requests:
      storage: 1Mi

ui.yaml

apiVersion: v1
kind: Service
metadata:
  name: ui
  labels:
    app: ui
spec:

  ports:
  - name: myport
    port: 80
    targetPort: 3000

  selector:
    app: ui
    tier: frontend

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: ui
  labels:
    app: ui
spec:
  selector:
    matchLabels:
      app: ui
      tier: frontend
  strategy:
    type: Recreate
  template:
    metadata:
      labels:
        app: ui
        tier: frontend
    spec:

      containers:
      - image: suji165475/devops-sample:updatedclientdockerfile
        name: ui
        ports:
        - containerPort: 80
          name: myport
        volumeMounts:
        - name: ui-persistent-storage-one
          mountPath: /usr/src/app
        - name: ui-persistent-storage-two
          mountPath: /usr/src/app/node_modules
      volumes:
      - name: ui-persistent-storage-one
        persistentVolumeClaim:
          claimName: ui-initdb-pv-claim-one
      - name: ui-persistent-storage-two
        persistentVolumeClaim:
          claimName: ui-initdb-pv-claim-two

UI YAML 中使用的图像是使用以下 Dockerfile 构建的

FROM node:12.4.0-alpine
RUN mkdir -p usr/src/app
WORKDIR /usr/src/app
COPY package.json package.json
RUN npm install && npm cache clean --force
RUN npm install -g webpack-cli
RUN npm install --save-dev react-dev-utils
WORKDIR /usr/src/app
COPY . .
WORKDIR /usr/src/app
EXPOSE 3000
RUN npm run build
CMD [ "npm","start" ]

docker-compose.yaml

version: "3"

services:
  pg_db:
    image: postgres
    networks: 
      - wootzinternal
    ports:
      - 5432
    environment:
      - POSTGRES_PASSWORD=password
      - POSTGRES_USER=postgres
      - POSTGRES_DB=wootz
    volumes:
      - wootz-db:/var/lib/postgresql/data
  apiserver:
    image: wootz-backend
    volumes:
      - ./api:/usr/src/app
      - /usr/src/app/node_modules
    build:
      context: ./api
      dockerfile: Dockerfile
    networks: 
      - wootzinternal
    depends_on:
      - pg_db
    ports:
      -  '8000:8000'
  ui:
    image: wootz-frontend
    volumes:
      - ./client:/usr/src/app
      - /usr/src/app/build
      - /usr/src/app/node_modules
    build:
      context: ./client
      dockerfile: Dockerfile
    networks:
      - wootzinternal
    ports:
      - '80:3000'

volumes:
  wootz-db:

networks:
  wootzinternal:
    driver: bridge

我该如何解决“Cannot find module 'react-dev-utils/chalk'”错误?Dockerfile是否缺少内容?或者需要删除某些内容吗?

注意:当使用docker run命令或使用docker-compose直接运行容器时,UI应用程序可以正常工作,但在Kubernetes上运行时会显示此错误。请帮助解决。


这似乎与你之前的问题完全一样。我的建议是使用图片中的代码而不是覆盖它有帮助吗?还是之前那个问题中的任何其他评论有帮助呢? - David Maze
为什么我不能在 Kubernetes 上使用 YAML 文件实现相同的事情呢? - Swetha Swaminathan
好的,那么在 Kubernetes 上运行它的其他方式是什么?如果我删除持久卷,那么如何在容器内挂载路径? - Swetha Swaminathan
我已经更新了我的问题,并附上了一个docker-compose文件。这就是我想在Kubernetes上运行的内容。 - Swetha Swaminathan
我也遇到了同样的问题,检查了node_modules文件夹,但是找不到Chalk,也无法在任何地方找到这个包。 - fp007
显示剩余6条评论
1个回答

0
不要将您的卷挂载在容器文件所在的相同位置。
是的,它可能可以与docker一起使用。是的,它可能可以与docker-compose一起使用。
但你必须知道,Kubernetes 处理卷的方式与 docker/docker-compose 不同。
K8s 挂载卷的方式类似于 在 Docker 中绑定挂载。这意味着例如 k8s 卷不会预先填充容器内容位于挂载卷路径下的文件。如果您在 /usr/src/app 下挂载卷,则放置在那里的每个文件现在都消失了(或者由于绑定挂载而被隐藏)并且很难访问。
那么在这种情况下该怎么办呢?重新考虑您的应用程序设计,并最重要的是:不要将卷挂载在您保存文件(例如此案例中的模块文件)的位置。在挂载卷时,选择一个容器中不存在或存在但为空的路径。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接