[英]docker build fail on nestjs microservice build
我有這個 docker 文件:
FROM node:14.15.0 as build
WORKDIR /node-app
COPY package*.json /node-app/
RUN npm set progress=false && npm config set depth 0 && npm cache clean --force
RUN npm install
COPY . .
RUN npm run build
FROM node:14.15
WORKDIR /node-app
COPY package.json /node-app/
RUN npm install --only=production
COPY --from=build /node-app/dist ./dist
RUN npm run start:prod
使用這個 package.json
{
"name": "genysis-dbservice",
"version": "0.0.1",
"description": "",
"author": "",
"license": "UNLICENSED",
"scripts": {
"prebuild": "rimraf dist",
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"start:prod": "node dist/main",
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"test": "jest",
"test:watch": "jest --watch",
"test:cov": "jest --coverage",
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
"test:e2e": "jest --config ./test/jest-e2e.json"
},
"private": true,
"dependencies": {
"@nestjs/common": "^7.6.5",
"@nestjs/config": "^0.6.1",
"@nestjs/core": "^7.6.5",
"@nestjs/microservices": "^7.6.5",
"@nestjs/platform-express": "^7.6.5",
"@nestjs/websockets": "^7.6.5",
"core-js": "^3.6.5",
"neo4j-driver": "^4.1.1",
"reflect-metadata": "^0.1.12",
"rimraf": "^2.6.2",
"rxjs": "^6.3.3"
},
"devDependencies": {
"@nestjs/testing": "^7.4.2",
"@types/express": "^4.16.0",
"@types/jest": "^26.0.9",
"@types/node": "^10.12.18",
"@types/supertest": "^2.0.7",
"concurrently": "^4.1.0",
"jest": "^26.3.0",
"nodemon": "^1.18.9",
"prettier": "^1.15.3",
"supertest": "^3.4.1",
"ts-jest": "^26.2.0",
"ts-node": "8.1.0",
"tsconfig-paths": "3.8.0",
"tslint": "5.16.0",
"typescript": "~4.0.5",
"wait-on": "^3.2.0"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".spec.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"coverageDirectory": "../coverage",
"testEnvironment": "node"
}
}
這個tsconfig:
"compilerOptions": {
"module": "commonjs",
"declaration": true,
"removeComments": true,
"emitDecoratorMetadata": true,
"experimentalDecorators": true,
"allowSyntheticDefaultImports": true,
"target": "es2019",
"sourceMap": true,
"outDir": "./dist",
"baseUrl": "./",
"incremental": true
},
"exclude": ["node_modules"]
}
我的節點是 14.15.0 版本,我的 npm 是 6.14.8,全局嵌套是 7.5.4。 我已將 typescript 版本從 ~4.5.0 更改為 4.4.2 再到 4.0.5,但在運行 npm 運行構建時仍然出現故障。
#16 2.145 sh: 1: nest: not found
不用說 npm 運行構建並運行啟動:產品在 docker 之外工作正常.....
不用說 npm 運行構建並運行啟動:產品在 docker 之外工作正常
這里有幾點需要注意:
package.json
中定義,因此未安裝。 我假設您在主機上全局安裝了 nestjs(在 docker 之外)package.json
中定義,npm 也不會將其安裝為全局 ZEFE90A8E604A7CFB603您可以通過以下幾種方式解決它:
package.json
,它將可用於您的項目。 如果您希望使用package.json
並使軟件包在全球范圍內可用,則將/node-app/node_modules
添加到您的路徑(在您的主機上或在 Z05B6053C41A2130AFD6FC3B158BDA4E 圖像上) RUN npm install ENV PATH="/node-app/node_modules:${PATH}"
RUN npm install -g nestjs
問題是缺少@nestjs/cli
來構建您的項目。 您可以通過 2 種方式解決問題,具體取決於您的項目的維護方式。
1-如果您使用自動化工具來獲取項目,請編輯您的dockerfile
以使以下行中的“之一”出現在RUN npm run build
之前。 第一個全局安裝,因此您可以在 shell 中將其用作免費命令,第二個只能在 npm 腳本中使用。 構建映像將被自動刪除,因此您在容器內使用哪個並不重要,但如果您在沒有容器的情況下共享,則會有所不同。
> RUN npm install -g @nestjs/cli@7.5
> RUN npm i -D @nestjs/cli@7.5
2-如果您擁有該項目,請使用npm i -D @nestjs/cli@7.5
或編輯packages.json
並在創建容器之前手動添加
"devDependencies": {
"@nestjs/cli": "7.5",
"@nestjs/testing": "^7.4.2",
從您的packages.json
中使用的版本可以追溯到一年前, version 7.5
似乎是合適的版本。 目前這將安裝version 7.5.7
。 如果您仍然有相同的設置,請使用nest --version
查看要使用的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.