Package.json 使用 kubernetes 时找不到文件
Package.json file not found when using kubernetes
我尝试使用 docker 在我的本地环境中设置 kubernetes。我已经用这个 Dockerfile 构建了必要的 docker 图像:
FROM node:9.11.1
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app/
EXPOSE 3002
CMD [ "npm", "start" ]
然后我将此图像推送到我在 google 云存储库上的私有 docker 存储库。现在我可以确认我可以从云存储库中推送和拉取图像,所以我构建了一个 docker-compose 使用该存储库作为图像源文件:
version: '3'
services:
redis:
image: redis
ports:
- 6379:6379
networks:
- my-network
mongodb:
image: mongo
ports:
- 27017:27017
volumes:
- ./db:/data/db
networks:
- my-network
my-test-app:
tty: true
image: gcr.io/my-test-app
ports:
- 3002:3002
depends_on:
- redis
- mongodb
networks:
- my-network
volumes:
- .:/usr/src/app
environment:
- REDIS_PORT=6379
- REDIS_HOST=redis
- DB_URI=mongodb://mongodb:27017/
command: bash -c "ls && npm install"
networks:
my-network:
driver: bridge
volumes:
mongodb:
最后,我使用 Kubernetes kompose 生成我的部署文件,如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.12.0 ()
creationTimestamp: null
labels:
io.kompose.service: my-test-app
name: my-test-app
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
creationTimestamp: null
labels:
io.kompose.service: my-test-app
spec:
imagePullSecrets:
- gcr-json-key
containers:
- args:
- bash
- -c
- ls && npm install
env:
- name: DB_URI
value: mongodb://mongodb:27017/
- name: REDIS_HOST
value: redis
- name: REDIS_PORT
value: "6379"
image: gcr.io/my-test-app
name: my-test-app
ports:
- containerPort: 3002
resources: {}
tty: true
volumeMounts:
- mountPath: /usr/src/app
name: my-test-app-claim0
restartPolicy: Always
volumes:
- name: my-test-app-claim0
persistentVolumeClaim:
claimName: my-test-app-claim0
status: {}
正如您在我的 yaml 的 args 部分中看到的那样,我列出了我的目录中的所有文件 /usr/src/app
但是它记录的唯一文件是单个 package-lock.json
文件,这导致以下安装命令失败。但是,当我使用 docker-compose 启动我的应用程序时,不会发生此错误,因此出于某种原因只有我的 kubernetes 有问题。我还可以通过 运行 交互式 shell 确认我的图像确实包含 package.json
文件。我不确定如何进行,因此我们将不胜感激!
您正在 /usr/src/app
上安装其他东西,而 package.json
应该位于该位置。这隐藏了那里的所有文件。删除 volumes
和 volumeMounts
部分。
我尝试使用 docker 在我的本地环境中设置 kubernetes。我已经用这个 Dockerfile 构建了必要的 docker 图像:
FROM node:9.11.1
WORKDIR /usr/src/app
COPY package.json /usr/src/app/
RUN npm install
COPY . /usr/src/app/
EXPOSE 3002
CMD [ "npm", "start" ]
然后我将此图像推送到我在 google 云存储库上的私有 docker 存储库。现在我可以确认我可以从云存储库中推送和拉取图像,所以我构建了一个 docker-compose 使用该存储库作为图像源文件:
version: '3'
services:
redis:
image: redis
ports:
- 6379:6379
networks:
- my-network
mongodb:
image: mongo
ports:
- 27017:27017
volumes:
- ./db:/data/db
networks:
- my-network
my-test-app:
tty: true
image: gcr.io/my-test-app
ports:
- 3002:3002
depends_on:
- redis
- mongodb
networks:
- my-network
volumes:
- .:/usr/src/app
environment:
- REDIS_PORT=6379
- REDIS_HOST=redis
- DB_URI=mongodb://mongodb:27017/
command: bash -c "ls && npm install"
networks:
my-network:
driver: bridge
volumes:
mongodb:
最后,我使用 Kubernetes kompose 生成我的部署文件,如下所示:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
annotations:
kompose.cmd: kompose convert
kompose.version: 1.12.0 ()
creationTimestamp: null
labels:
io.kompose.service: my-test-app
name: my-test-app
spec:
replicas: 1
strategy:
type: Recreate
template:
metadata:
creationTimestamp: null
labels:
io.kompose.service: my-test-app
spec:
imagePullSecrets:
- gcr-json-key
containers:
- args:
- bash
- -c
- ls && npm install
env:
- name: DB_URI
value: mongodb://mongodb:27017/
- name: REDIS_HOST
value: redis
- name: REDIS_PORT
value: "6379"
image: gcr.io/my-test-app
name: my-test-app
ports:
- containerPort: 3002
resources: {}
tty: true
volumeMounts:
- mountPath: /usr/src/app
name: my-test-app-claim0
restartPolicy: Always
volumes:
- name: my-test-app-claim0
persistentVolumeClaim:
claimName: my-test-app-claim0
status: {}
正如您在我的 yaml 的 args 部分中看到的那样,我列出了我的目录中的所有文件 /usr/src/app
但是它记录的唯一文件是单个 package-lock.json
文件,这导致以下安装命令失败。但是,当我使用 docker-compose 启动我的应用程序时,不会发生此错误,因此出于某种原因只有我的 kubernetes 有问题。我还可以通过 运行 交互式 shell 确认我的图像确实包含 package.json
文件。我不确定如何进行,因此我们将不胜感激!
您正在 /usr/src/app
上安装其他东西,而 package.json
应该位于该位置。这隐藏了那里的所有文件。删除 volumes
和 volumeMounts
部分。