首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NPM enoent ENOENT:没有这样的文件或目录,请在kubernetes作业运行期间打开'/usr/src/app/package.json

NPM enoent ENOENT:没有这样的文件或目录,请在kubernetes作业运行期间打开'/usr/src/app/package.json
EN

Stack Overflow用户
提问于 2020-05-05 19:52:27
回答 1查看 661关注 0票数 0

我有一个带有自定义包-lock.json,package.json的Dockerfile (节点:10),所以使用这个dockerfile,我需要创建一个dockerimage,然后我想运行kubernetes job (kind:job)作为一次任务,这意味着如果任务结束,你的pod将被终止,还需要将/usr/src/app/node_modules的输出挂载到我的kubernetes主机路径,以提供静态内容。

Dockerfile:-

代码语言:javascript
复制
FROM node:10
WORKDIR /usr/src/app/
#COPY package*.json /usr/src/app/
COPY . /usr/src/app/
RUN npm install

Dockerfile目录中已有的文件:-

代码语言:javascript
复制
Dockerfile  README.md  codegen.yml  package-lock.json  package.json  public  src  tsconfig.json

Kubernetes作业文件:-

代码语言:javascript
复制
apiVersion: batch/v1
kind: Job
metadata:
  name: workspace-forntend
spec:
  template:
    metadata:
      name: workspace-forntend
    spec:
      containers:
      - name: workspace-forntend
        image: node:10 (dummy path for public post) 
        imagePullPolicy: IfNotPresent
        command: ["/bin/bash","-c"]
        args: ["npm run build"]
        volumeMounts:
          - name: mount-1
            mountPath: /usr/src/app/
          - name: mount-2
            mountPath: /usr/src/app/node_modules
      volumes:
          - name: mount-1
            hostPath:
              path: /root/mount-1
              type: DirectoryOrCreate
          - name: mount-2
            hostPath:
               path: /root/mount-2
               type: DirectoryOrCreate
      restartPolicy: Never

但是得到错误:-

代码语言:javascript
复制
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /usr/src/app/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/usr/src/app/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent 

npm ERR! A complete log of this run can be found in:

注意:-所有权限(777)、路径/usr/src/app (pwd)、用户(root)都是完好无损的。

EN

回答 1

Stack Overflow用户

发布于 2020-05-05 20:20:52

由于您已经将应用程序代码COPY到您的Docker镜像中,因此您不需要在您的作业规范中单独挂载它。从作业规范中删除volumes:volumeMounts:部分。您还需要将image:更改为指向从该Docker文件构建的镜像,并将其推送到某个Docker注册表。

Kubernetes特别不适合实时开发环境。hostPath卷实际上是正常Kubernetes存储系统周围的一个逃生舱,而不是一种维护存储或外部内容的正常方式。除了将应用程序代码放在图像中之外,您还需要手动将应用程序复制到集群中的每个节点。这打破了普通的滚动-升级序列部署将为您提供的,并基本上使您从Kubernetes获得的任何优势化为乌有。

这看起来像是您正在尝试使用Kubernetes作为构建环境。为此设置一个专门构建的或云托管的工具可能会为您提供更好的服务。如果您正在尝试使用本地源码树和npm run build,那么使用本地Node安装将比您在这里所展示的要容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61612489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档