我最近使用DOCKER
和docker-compose
容器化了我朋友的NODE项目
package.json
{
"name": "moviesapi",
"version": "1.0.0",
"description": "A moviesApI to handle movie search request of the customers",
"main": "index.js",
"scripts": {
"start": "node index.js",
"test": "mocha test/**/*.intg.js --exit",
"dev": "nodemon index.js"
},
"author": "Flanker",
"license": "ISC",
"dependencies": {
"bcrypt": "^5.1.0",
"body-parser": "^1.20.0",
"config": "^3.3.8",
"cors": "^2.8.5",
"dotenv": "^16.0.3",
"express": "^4.18.1",
"express-async-errors": "^3.1.1",
"express-fileupload": "^1.4.0",
"fawn": "^2.1.5",
"file-upload": "^0.0.0",
"helmet": "^6.0.0",
"joi": "^17.6.3",
"joi-objectid": "^4.0.2",
"joi-password-complexity": "^5.1.0",
"jsonwebtoken": "^8.5.1",
"lodash": "^4.17.21",
"mongodb": "^4.10.0",
"mongoose": "^6.6.5",
"router": "^1.3.7",
"winston": "^3.8.2",
"winston-mongodb": "^3.0.2"
},
"devDependencies": {
"chai": "^4.3.6",
"mocha": "^10.1.0",
"nodemon": "^2.0.20",
"supertest": "^6.3.0"
}
}
Dockerfile
看起来像
FROM node:16
ENV NODE_ENV=production
WORKDIR /usr/src/app
ARG NODE_ENV=devlopment
ENV PORT=3000
COPY package*.json ./
RUN if [ "$NODE_ENV" = "production" ]; then npm ci --only=production; else npm install; fi
COPY . .
EXPOSE ${PORT}
RUN chown -R node /usr/src/app
USER node
CMD ["node", "index.js"]
docker-compose.yml
version: '3.4'
services:
app:
image: moviesapi
build:
context: .
dockerfile: ./Dockerfile
args:
- NODE_ENV=production
environment:
- NODE_ENV=production
- PORT=3000
- MONGO_URL=mongodb://mongo-db:27017/
ports:
- 3000:3000
depends_on:
- mongo-db
mongo-db:
image: mongo
ports:
- 27017:27017
volumes:
- moviesapi-mongo-data:/data/db
volumes:
moviesapi-mongo-data:
对于开发环境,docker-compose.dev.yml
version: '3.4'
services:
app:
image: moviesapi
build:
context: .
dockerfile: ./Dockerfile
args:
- NODE_ENV=devlopment
environment:
- NODE_ENV=devlopment
- moviesApi_jwtPrivateKey=example_moviesApi_jwtPrivateKey
ports:
- 3000:3000
volumes:
- ./:/usr/src/app
- /usr/src/app/node_modules
command: npm run dev
在我的Windows机器上,当我运行docker-compose -f docker-compose.yml -f docker-compose.dev.yml up --build -d
它在PowerShell
和WSL Ubuntu
中都工作得很好。但是当我在我朋友的电脑上运行同样的命令时,这是一个Ubuntu系统。日志提示nodemon不存在,绑定挂载也没有连接到容器。
所以我猜docker-compose.dev.yml
没有使用这个命令执行,只有docker-compose.yml
正在执行。不知道为什么。
您的docker-compose.dev.yml文件第10行有一个错别字。
args:
- NODE_ENV=devlopment
因为这个,他可能会回到默认的环境,不会安装devDependencies。