我有一个带有自定义包-lock.json,package.json的Dockerfile (节点:10),所以使用这个dockerfile,我需要创建一个dockerimage,然后我想运行kubernetes job (kind:job)作为一次任务,这意味着如果任务结束,你的pod将被终止,还需要将/usr/src/app/node_modules的输出挂载到我的kubernetes主机路径,以提供静态内容。
Dockerfile:-
FROM node:10
WORKDIR /usr/src/app/
#COPY package*.json /usr/src/app/
COPY . /usr/src/app/
RUN npm installDockerfile目录中已有的文件:-
Dockerfile README.md codegen.yml package-lock.json package.json public src tsconfig.jsonKubernetes作业文件:-
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)都是完好无损的。
发布于 2020-05-05 20:20:52
由于您已经将应用程序代码COPY到您的Docker镜像中,因此您不需要在您的作业规范中单独挂载它。从作业规范中删除volumes:和volumeMounts:部分。您还需要将image:更改为指向从该Docker文件构建的镜像,并将其推送到某个Docker注册表。
Kubernetes特别不适合实时开发环境。hostPath卷实际上是正常Kubernetes存储系统周围的一个逃生舱,而不是一种维护存储或外部内容的正常方式。除了将应用程序代码放在图像中之外,您还需要手动将应用程序复制到集群中的每个节点。这打破了普通的滚动-升级序列部署将为您提供的,并基本上使您从Kubernetes获得的任何优势化为乌有。
这看起来像是您正在尝试使用Kubernetes作为构建环境。为此设置一个专门构建的或云托管的工具可能会为您提供更好的服务。如果您正在尝试使用本地源码树和npm run build,那么使用本地Node安装将比您在这里所展示的要容易得多。
https://stackoverflow.com/questions/61612489
复制相似问题