node.js - 如何解决错误:在 kubernetes 上运行时找不到模块“react-dev-utils/chalk”?
问题描述
请不要将此标记为重复。我知道我以前曾问过这个问题,但我的问题没有得到解决。
在构建映像之前,我已经尝试将 RUN npm install --save-dev react-dev-utils 添加到 dockerfile 中,但这并不能解决问题。
豆荚的日志
> 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
超持久体积
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
uipersistantvolumetwo
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
我该如何解决错误找不到模块'react-dev-utils/chalk'??dockerfile中是否缺少任何内容?还是有什么我应该删除的?
注意:当使用 docker run 命令直接作为容器运行或使用 docker-compose 但在 kubernetes 上运行时,它会显示此错误。请帮助
解决方案
不要将卷安装在容器文件所在的位置。
是的,它可以与 docker 一起使用。是的,它可以与 docker-compose 一起使用。
但是你必须知道 kubernetes 处理卷的方式不同于 docker/docker-compose
K8s 挂载卷的方式类似于 docker 中的绑定挂载。这意味着,例如,k8s 卷不会预先填充位于卷安装路径下的容器内容。如果您在 下安装卷/usr/src/app
,则放置在那里的每个文件现在都消失了(或者由于绑定安装而隐藏)并且无法轻松访问。
那么在这种情况下你能做什么呢?重新考虑您的应用程序设计,最重要的是:不要将卷安装在您保存文件的位置(如本例中的模块文件)。挂载卷时,选择容器中不存在的路径,或者存在且为空的路径。
推荐阅读
- sql - Rails 中的 SQL 关系。尝试为一个表关系创建两个不同的引用。非常混乱的情况
- regex - 如何在 HTML 中选择文本的特定部分并使用正则表达式将其转换为大写?
- reactjs - 如何使用 babel 配置 Webpack 以识别类的静态属性?
- c# - EF 问题添加带有子实体列表的实体
- javascript - 无法在 Docker 容器内运行 JavaScript 测试
- c# - 泛型:在泛型方法上使用约束“where T:class”访问对象属性
- android - React native 中的 Json Parser 错误
- sql - 将两个最大日期与 Oracle SQL 中的条件进行比较
- reactjs - moct store Mocha Enzyme 的测试无效
- c# - 检索图像时出现“参数无效”错误