Node.js NPM enoint enoint:没有这样的文件或目录,打开'/kubernetes作业运行期间的usr/src/app/package.json

Node.js NPM enoint enoint:没有这样的文件或目录,打开'/kubernetes作业运行期间的usr/src/app/package.json,node.js,json,docker,kubernetes,npm-install,Node.js,Json,Docker,Kubernetes,Npm Install,我有一个带有自定义package-lock.json、package.json的节点(节点:10)Dockerfile,所以使用这个Dockerfile我需要创建一个dockerimage,然后我想运行kubernetes作业(种类:job)因为一次性任务意味着如果任务结束,您的pod将被终止,并且还需要将/usr/src/app/和/usr/src/app/node_模块的输出装载到my kubernetes主机路径以提供静态内容 Dockerfile:- FROM node:10 WORKD

我有一个带有自定义package-lock.json、package.json的节点(节点:10)Dockerfile,所以使用这个Dockerfile我需要创建一个dockerimage,然后我想运行kubernetes作业(种类:job)因为一次性任务意味着如果任务结束,您的pod将被终止,并且还需要将/usr/src/app/和/usr/src/app/node_模块的输出装载到my kubernetes主机路径以提供静态内容

Dockerfile:-

FROM node:10
WORKDIR /usr/src/app/
#COPY package*.json /usr/src/app/
COPY . /usr/src/app/
RUN npm install
Dockerfile目录中已可用的文件:-

Dockerfile  README.md  codegen.yml  package-lock.json  package.json  public  src  tsconfig.json
Kubernetes作业文件:-

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
但获得错误:-

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)都是完整的。

由于您已
将应用程序代码复制到Docker映像中,因此无需将其单独装入作业规范中。从作业规范中删除
卷:
卷数量:
部分。您还需要更改
图像:
以指向从Docker文件中构建的图像,并将其推送到某个Docker注册表

Kubernetes特别不适合实时开发环境<代码>主机路径
卷实际上是普通Kubernetes存储系统的一个逃生舱,而不是维护存储或外部内容的正常方式。除了如图所示将应用程序代码放入映像中之外,还需要手动将应用程序复制到集群中的每个节点。这打破了部署将为您提供的普通滚动升级序列,并从本质上消除了您从Kubernetes获得的任何优势


这看起来就像您试图使用Kubernetes作为构建环境。为此设置专门构建的或云托管的工具可能会更好地为您服务。如果您试图获取本地源代码树并在其上运行构建
npm
,使用本地节点安装将比您在此处展示的要容易得多。

我这样做是因为在进行多分支部署时,我需要在我所需的命名空间中使用此npm运行构建代码。我需要为我所需的每个命名空间提供卷和卷数量,以便我可以按照命名空间提供静态内容。为什么是hostPath,因为这是开发阶段,所以我只想使用本地主机位置,否则我将尝试使用efs或s3 bucket来服务contentKubernetes,但实际上并不是这样。您可以让CI系统为每个分支构建单独的Docker映像,并在
映像:
标记中引用右分支的映像。我不确定在每次更改时将每个分支的代码复制到每个节点的系统将如何工作;考虑到您需要像Ansible或Chef这样的自动化工具来管理这一点,将其作为一流的部署工具使用可能更容易,而不是试图将Kubernetes纳入其中。实际上,开发人员正在通过dockercompse做同样的事情,所以我认为这在kubenetes中也是可能的