【发布时间】:2019-07-23 13:23:42
【问题描述】:
我基本上是在尝试运行一个 React js 应用程序,它主要由 3 个服务组成,即 postgres db、API 服务器和 UI 前端(使用 nginx 服务)。目前该应用程序在使用 docker-compose 的开发模式下按预期工作,但是当我尝试使用 kubernetes 在生产中运行它时,我无法访问应用程序的 api 服务器(连接被拒绝)。
我已经尝试在 api 服务器容器中运行命令 npm install。
API 服务器镜像的 Dockerfile
FROM node:12.4.0-alpine
RUN mkdir -p usr/src/app
WORKDIR /usr/src/app
COPY package.json package.json
RUN npm install sequelize-cli nodemon -g
RUN npm install && npm cache clean --force
WORKDIR /usr/src/app
COPY . .
WORKDIR /usr/src/app
EXPOSE 8000
CMD [ "npm","start" ]
API服务器的package.json
{
"name": "wootz-backend",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node_modules/.bin/nodemon index.js",
"migrate": "node_modules/.bin/sequelize db:migrate --config config/config.json"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.17.1",
"nodemon": "^1.19.1",
"pg": "^7.11.0",
"sequelize": "^5.8.7",
"sequelize-cli": "^5.4.0"
}
}
API 持久化卷一 yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: api-initdb-pv-volume
labels:
type: local
app: api
spec:
storageClassName: manual
capacity:
storage: 1Mi
accessModes:
- ReadOnlyMany
hostPath:
path: "/home/vignesh/page designer kubernetes yamls/api"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: api-initdb-pv-claim-one
labels:
app: api
spec:
storageClassName: manual
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 1Mi
API 持久化卷二 yaml
kind: PersistentVolume
apiVersion: v1
metadata:
name: api-initdb-pv-volume-2
labels:
type: local
app: api
spec:
storageClassName: manual
capacity:
storage: 1Mi
accessModes:
- ReadOnlyMany
hostPath:
path: "/home/vignesh/page designer kubernetes yamls/api"
---
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: api-initdb-pv-claim-two
labels:
app: api
spec:
storageClassName: manual
accessModes:
- ReadOnlyMany
resources:
requests:
storage: 1Mi
APIserver.yaml
apiVersion: v1
kind: Service
metadata:
name: apiserver
labels:
app: apiserver
spec:
ports:
- name: apiport
port: 8000
targetPort: 8000
selector:
app: apiserver
tier: backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: apiserver
labels:
app: apiserver
spec:
selector:
matchLabels:
app: apiserver
tier: backend
strategy:
type: Recreate
template:
metadata:
labels:
app: apiserver
tier: backend
spec:
containers:
- image: suji165475/vignesh:apifinal
name: apiserver
env:
- name: POSTGRES_PASSWORD
value: password
- name: POSTGRES_USER
value: postgres
- name: POSTGRES_DB
value: wootz
ports:
- containerPort: 8000
name: myport
volumeMounts:
- name: api-persistent-storage-one
mountPath: /usr/src/app
- name: api-persistent-storage-two
mountPath: /usr/src/app/node_modules
volumes:
- name: api-persistent-storage-one
persistentVolumeClaim:
claimName: api-initdb-pv-claim-one
- name: api-persistent-storage-two
persistentVolumeClaim:
claimName: api-initdb-pv-claim-two
当我尝试在 api 服务器容器中运行命令 npm run migrate 时,我收到一条错误消息-
/usr/src/app # npm 运行迁移
wootz-backend@1.0.0 迁移 /usr/src/app sequelize db:migrate --config config/config.json
无法解析 /usr/src/app 中的 sequelize 包 呃!代码生命周期 呃!错误号 1 呃! wootz-backend@1.0.0 迁移:
sequelize db:migrate --config > config/config.json呃!退出状态 1 呃! 呃! wootz-backend@1.0.0 迁移脚本失败。
我也尝试在 api 容器中运行命令 npm install --save sequelize 但这次我得到一个不同的错误 -
WARN checkPermissions 缺少对 /usr/src/app/node_modules/pg 的写访问权限 WARN pg-pool@2.0.6 需要 pg@>5.0 的对等点,但没有安装。您必须 > 自己安装对等依赖项。 WARN wootz-backend@1.0.0 无描述 WARN wootz-backend@1.0.0 没有存储库字段。
错误!路径 /usr/src/app/node_modules/pg 呃!代码ENOENT 呃!错误号 -2 呃!系统调用访问 呃! enoent ENOENT:没有这样的文件或目录,访问 > > '/usr/src/app/node_modules/pg' 呃! enoent 这与 npm 找不到文件有关。 呃!恩恩特
注意:此问题仅在我使用 kubernetes 运行时发生,而不是在使用 docker-compose 的开发模式下发生。因此,它不会是应用程序本身的问题。
【问题讨论】:
标签: node.js reactjs docker npm kubernetes