下面是docker-compose.yml
:
version: "3.8"
services:
application:
container_name: NodeJS
ports:
- 3000:3000
depends_on:
- mongodb
build:
context: ./application
target: node
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"
volumes:
- ./application:/app
...
字符串
在./application/Dockerfile
中:
FROM node:alpine AS node
# install dependencies
RUN apk add --no-cache git python3 make gcc g++ libc-dev libpng-dev
RUN apk add --no-cache pixman-dev cairo-dev pango-dev jpeg-dev giflib-dev pkgconfig
RUN npm install -g npm@latest
WORKDIR /app
COPY . .
# Delete node_modules and package-lock.json for a clean install
# RUN rm -rf node_modules
# RUN rm -rf package-lock.json
# RUN npm install -g node-gyp
RUN npm install
EXPOSE 3000
CMD ["npm", "start"]
型
最后,我的./application/package.json
:
{
"name": "",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node ./app.js"
},
"dependencies": {
"base-64": "^1.0.0",
"better-sqlite3": "^8.6.0",
"blueimp-md5": "^2.19.0",
"compression": "^1.7.4",
"cookie-parser": "~1.4.4",
"debug": "~2.6.9",
"express": "^4.18.2",
"express-robots-txt": "^1.0.0",
"express-subdomain": "^1.0.5",
"helmet": "^7.0.0",
"highlight.js": "^11.8.0",
"http-errors": "~1.6.3",
"identicon": "^3.1.1",
"identicon.js": "^2.3.3",
"mongoose": "^7.3.0",
"morgan": "~1.9.1",
"path": "^0.12.7",
"pug": "^3.0.2",
"sqlite3": "^5.1.6"
}
}
型
显然,在我的Dockerfile
中,我运行了“npm install”。然而,我的npm start
(简单地说是node ./app.js
)只是给了我一个“错误:找不到模块'express'”。该项目是一个JavaScript项目。如果我们引用package.json
,email protected(https://stackoverflow.com/cdn-cgi/l/email-protection)应该正在安装。
有什么想法吗?
1条答案
按热度按时间jchrr9hc1#
COPY . .命令将所有文件从当前目录(包括node_modules目录,如果存在的话)复制到Docker镜像中,然后您正在运行npm install,由于与现有node_modules目录冲突,可能无法正确安装依赖项。
您可以在运行npm install之前删除node_modules文件夹,以确保您的依赖项正确安装在Docker镜像中。
更新Dockerfile:
字符串