我有以下文件夹结构:
- main/
.docker-compose.yml
- backend/
- micro-hr/
.dockerfile
- rabbitmq
我有我的micro文件夹,这里是我的主要包,我有一个本地库,它是rabbitmq。
这是我的文件:
FROM node:lts-alpine
#create app directory
#xx
WORKDIR /usr/src
RUN apk add --no-cache bash git
RUN touch /usr/src/.bashrc | echo "PS1='\w\$ '" >> /usr/src/.bashrc
#copy files
COPY ormconfig.ts .env package.json yarn.* ./
COPY ./rabbitmq/package.json /usr/src/rabbitmq/
#install modules lib modules
RUN cd /usr/src/api/ && npm install
#copy other files
COPY . /usr/src/api/
COPY ../rabbitmq /usr/src/rabbitmq/
#set work dir
USER node
码头工人-组成:
version: "3.7"
services:
micro-hr:
build: ./backend/micro-hr
entrypoint: ./.docker/entrypoint.sh
container_name: micro-hr
environment:
- CHOKIDAR_USEPOLLING=true
ports:
- 3001:3000
这是我的主包后端/micro上的package.json:
{
"name": "micro-hr",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"scripts": {
"postinstall": "npm link ../rabbitmq/",
"postupdate": "npm link ../rabbitmq/",
"commit": "git-cz",
"build": "babel src --extensions \".js,.ts\" --out-dir dist --copy-files --no-copy-ignored",
"start:dev": "ts-node-dev --inspect --respawn --transpile-only --ignore-watch node_modules -r tsconfig-paths/register src/index.ts",
"start:debug": "node start --debug --watch",
"start:prod": "node dist/index.ts",
"test": "jest",
"lint": "eslint --fix",
"lint2": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
"typeorm": "ts-node -r tsconfig-paths/register ./node_modules/typeorm/cli.js --config ./ormconfig.ts",
"migration:generate": "ts-node ./node_modules/typeorm/cli.js migration:generate -n"
},
"devDependencies": {
"@babel/cli": "^7.11.5",
"@babel/core": "^7.11.5",
"@babel/node": "^7.10.5",
"@babel/preset-env": "^7.11.5",
"@babel/preset-typescript": "^7.10.4",
"@commitlint/cli": "^9.1.2",
"@commitlint/config-conventional": "^9.1.2",
"@types/bcryptjs": "^2.4.2",
"@types/cookie-parser": "^1.4.2",
"@types/cors": "^2.8.7",
"@types/express": "^4.17.8",
"@types/helmet": "^0.0.48",
"@types/jest": "^26.0.13",
"@types/pino": "^6.3.0",
"@types/pino-http": "^5.0.5",
"@types/supertest": "^2.0.10",
"@typescript-eslint/eslint-plugin": "^4.0.1",
"@typescript-eslint/parser": "^4.0.1",
"babel-plugin-module-resolver": "^4.0.0",
"commitizen": "^4.2.1",
"cz-conventional-changelog": "^3.3.0",
"eslint": "^7.8.1",
"eslint-config-airbnb-base": "^14.2.0",
"eslint-config-prettier": "^6.11.0",
"eslint-config-standard": "^14.1.1",
"eslint-import-resolver-typescript": "^2.3.0",
"eslint-plugin-import": "^2.22.0",
"eslint-plugin-node": "^11.1.0",
"eslint-plugin-prettier": "^3.1.4",
"eslint-plugin-promise": "^4.2.1",
"eslint-plugin-standard": "^4.0.1",
"husky": "^4.2.5",
"jest": "^26.4.2",
"pino-pretty": "^4.2.0",
"prettier": "^2.1.1",
"supertest": "^4.0.2",
"ts-jest": "^26.3.0",
"ts-node": "^9.0.0",
"ts-node-dev": "^1.0.0-pre.62",
"tsconfig-paths": "^3.9.0",
"tscpaths": "^0.0.9",
"typescript": "^4.0.2"
},
"dependencies": {
"amqplib": "^0.6.0",
"assert": "^2.0.0",
"bcryptjs": "^2.4.3",
"class-transformer": "^0.3.1",
"cors": "^2.8.5",
"dotenv": "^8.2.0",
"envalid": "^6.0.2",
"express": "^4.17.1",
"extendable-error": "^0.1.7",
"helmet": "^4.1.0",
"pg": "^8.3.3",
"pino": "^6.5.1",
"pino-http": "^5.2.0",
"reflect-metadata": "^0.1.13",
"tsyringe": "^4.3.0",
"typeorm": "^0.2.25"
},
"config": {
"commitizen": {
"path": "cz-conventional-changelog"
}
}
}
我不知道我错了什么地方,基本上,我用npm链接在我的主包中创建了指向我的lib的链接,并试图在停靠器中创建文件夹,但没有效果。
码头生成错误:
步骤6/10 :复制./rabbitmq/Package.json /usr/src/rabbitmq/ ERROR:服务“micro”生成失败:复制失败:构建上下文外的禁止路径:./rabbitmq/pacage.json ()
发布于 2020-09-07 20:59:01
.dockerfile
中的这一行
COPY ./rabbitmq/package.json /usr/src/rabbitmq/
告诉Docker在构建上下文的主目录中的rabbitmq
文件夹中查找文件/usr/src/rabbitmq/
,然后将其作为/usr/src/rabbitmq/
复制到容器中。
.docker-compose.yml
中的这一行
build: ./backend/micro-hr
将构建上下文设置为相对于该文件的目录backend/micro-hr
。
因此,如果您的文件结构是:
main
|- .docker-compose.yml
|- backend/
|- micro-hr/
|-.dockerfile
|- rabbitmq
然后告诉Docker复制不存在的backend/micro-hr/rabbitmq/package.json
。此外,您的rabbitmq
目录根本不在构建上下文中,无论您把什么放入Dockerfile中,它都是永远找不到的。
因此,您应该将.docker-compose.yml
更改为:
version: "3.7"
services:
micro-hr:
build:
context: .
dockerfile: backend/micro-hr/.dockerfile
entrypoint: ./.docker/entrypoint.sh
container_name: micro-hr
environment:
- CHOKIDAR_USEPOLLING=true
ports:
- 3001:3000
以及您的.dockerfile
to (我认为,您没有指定所有这些文件在项目中的位置)
FROM node:lts-alpine
#create app directory
#xx
WORKDIR /usr/src
RUN apk add --no-cache bash git
RUN touch /usr/src/.bashrc | echo "PS1='\w\$ '" >> /usr/src/.bashrc
#copy files
COPY backend/micro-hr/ormconfig.ts backend/micro-hr/.env backend/micro-hr/package.json backend/micro-hr/yarn.* ./
COPY backend/rabbitmq/package.json /usr/src/rabbitmq/
#install modules lib modules
RUN cd /usr/src/api/ && npm install
#copy other files
COPY backend/micro-hr/ /usr/src/api/
COPY backend/rabbitmq /usr/src/rabbitmq
#set work dir
USER node
作为附带说明,这一点:
USER node
设置用户,而不是工作目录。
发布于 2020-09-07 20:39:48
您需要在docker-组合文件中提供上下文:
version: "3.7"
services:
micro-hr:
context: . # here
build: ./backend/micro-hr
entrypoint: ./.docker/entrypoint.sh
container_name: micro-hr
environment:
- CHOKIDAR_USEPOLLING=true
ports:
- 3001:3000
您总是需要提供上下文。
https://stackoverflow.com/questions/63783792
复制相似问题