NPM enoent ENOENT: нет такого файла или каталога, откройте '/usr/src/app/package.json во время выполнения задания kubernetes - PullRequest
0 голосов
/ 05 мая 2020

У меня есть node (node: 10) Dockerfile с настраиваемой блокировкой пакетов. json, package. json, поэтому, используя этот dockerfile, мне нужно создать dockerimage, а затем я хочу запустить задание kubernetes (kind: job ) в качестве одноразовой задачи означает, что если задача завершена, ваш модуль будет убит, а также потребуется подключить вывод / usr / src / app / и / usr / src / app / node_modules к моему пути хоста kubernetes для обслуживания stati c content.

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) не повреждены.

1 Ответ

0 голосов
/ 05 мая 2020

Поскольку вы COPY добавили код своего приложения в образ Docker, вам не нужно отдельно монтировать его в спецификации задания. Удалите разделы volumes: и volumeMounts: из спецификации c задания. Вам также необходимо изменить image:, чтобы он указывал на образ, который вы создали из этого Dockerfile, помещенного в некоторый Docker реестр.

Kubernetes особенно не подходит для живой среды разработки. Тома hostPath на самом деле представляют собой своего рода спасательный люк вокруг обычной системы хранения Kubernetes, а не нормальный способ поддерживать хранилище или внешний контент. Помимо помещения кода вашего приложения в изображение, как вы его показали, вам также потребуется вручную скопировать приложение на каждый узел в кластере. Это нарушает обычную последовательность развертывания с последовательным обновлением, которую предоставляют вам, и по существу сводит на нет все преимущества, которые вы получаете от Kubernetes.

Это почти похоже на то, что вы пытаетесь использовать Kubernetes в качестве среды сборки. Настройка специально созданного или размещенного в облаке инструмента для этого, вероятно, будет вам лучше. Если вы пытаетесь взять свое локальное дерево исходных текстов и npm run build на нем, использование локальной установки Node будет намного проще, чем то, что вы показали здесь.

...