Node.js docker compose:找不到模块';打字形式';
这可能是一个重复的问题,但我无法理解。我正在尝试将以下内容归档:Node.js docker compose:找不到模块';打字形式';,node.js,docker,docker-compose,typeorm,Node.js,Docker,Docker Compose,Typeorm,这可能是一个重复的问题,但我无法理解。我正在尝试将以下内容归档: Postgres + NodeJs(Express, server) + Angular (dashboard) 构建中的两个项目都在/dist文件夹中生成文件 我可以单独构建和运行项目 我的目录结构: /root docker-compose.yml dashboard server 以下是服务器和前端项目的docker文件: 仪表板/Dockerfile # Stage 1 - Build project
Postgres + NodeJs(Express, server) + Angular (dashboard)
构建中的两个项目都在/dist文件夹中生成文件
我可以单独构建和运行项目
我的目录结构:
/root
docker-compose.yml
dashboard
server
以下是服务器和前端项目的docker文件:
仪表板/Dockerfile
# Stage 1 - Build project
FROM node:latest as builder
WORKDIR /app
# Whatever directory you can use
COPY . /app/
RUN npm install
RUN npm run build --prod
# Stage 2 - Deploy in nginx
FROM nginx:alpine
RUN rm -rf /usr/share/nginx/html/*
COPY --from=builder /app/dist/ /usr/share/nginx/html/
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
FROM node:12
WORKDIR /app
# Adding package.json first
# If the package.json file changes, then Docker will re-run the npm install sequence otherwise Docker will use our cache and skip that part.
COPY package*.json /app/
RUN npm install
# Copy source code to docker image
COPY ./dist/* /app/
COPY .env.docker /app/.env
EXPOSE 3000
CMD node server.js
# Specify docker compose version
version: "3.7"
# Specify all the services we want in the container
services:
db:
# Type of database
image: postgres
# Pass values to database
environment:
POSTGRES_DB: 'somedb'
POSTGRES_USER: 'someuser'
POSTGRES_PASSWORD: 'somepassword'
volumes:
# Map path of data directory of postgres to local one
- ./pgdata:/varlib/postgresql/data
ports:
- '5432:5432'
# node server
server:
build: server
links:
- db
ports:
- '3000:3000'
volumes:
- ./server/dist:/app
# front end
dashboard:
build: dashboard
depends_on:
- server
ports:
- '80:80'
volumes:
- ./dashboard/angular/dist:/app
服务器/Dockerfile
# Stage 1 - Build project
FROM node:latest as builder
WORKDIR /app
# Whatever directory you can use
COPY . /app/
RUN npm install
RUN npm run build --prod
# Stage 2 - Deploy in nginx
FROM nginx:alpine
RUN rm -rf /usr/share/nginx/html/*
COPY --from=builder /app/dist/ /usr/share/nginx/html/
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
FROM node:12
WORKDIR /app
# Adding package.json first
# If the package.json file changes, then Docker will re-run the npm install sequence otherwise Docker will use our cache and skip that part.
COPY package*.json /app/
RUN npm install
# Copy source code to docker image
COPY ./dist/* /app/
COPY .env.docker /app/.env
EXPOSE 3000
CMD node server.js
# Specify docker compose version
version: "3.7"
# Specify all the services we want in the container
services:
db:
# Type of database
image: postgres
# Pass values to database
environment:
POSTGRES_DB: 'somedb'
POSTGRES_USER: 'someuser'
POSTGRES_PASSWORD: 'somepassword'
volumes:
# Map path of data directory of postgres to local one
- ./pgdata:/varlib/postgresql/data
ports:
- '5432:5432'
# node server
server:
build: server
links:
- db
ports:
- '3000:3000'
volumes:
- ./server/dist:/app
# front end
dashboard:
build: dashboard
depends_on:
- server
ports:
- '80:80'
volumes:
- ./dashboard/angular/dist:/app
docker compose
# Stage 1 - Build project
FROM node:latest as builder
WORKDIR /app
# Whatever directory you can use
COPY . /app/
RUN npm install
RUN npm run build --prod
# Stage 2 - Deploy in nginx
FROM nginx:alpine
RUN rm -rf /usr/share/nginx/html/*
COPY --from=builder /app/dist/ /usr/share/nginx/html/
COPY ./nginx/nginx.conf /etc/nginx/conf.d/default.conf
EXPOSE 80
FROM node:12
WORKDIR /app
# Adding package.json first
# If the package.json file changes, then Docker will re-run the npm install sequence otherwise Docker will use our cache and skip that part.
COPY package*.json /app/
RUN npm install
# Copy source code to docker image
COPY ./dist/* /app/
COPY .env.docker /app/.env
EXPOSE 3000
CMD node server.js
# Specify docker compose version
version: "3.7"
# Specify all the services we want in the container
services:
db:
# Type of database
image: postgres
# Pass values to database
environment:
POSTGRES_DB: 'somedb'
POSTGRES_USER: 'someuser'
POSTGRES_PASSWORD: 'somepassword'
volumes:
# Map path of data directory of postgres to local one
- ./pgdata:/varlib/postgresql/data
ports:
- '5432:5432'
# node server
server:
build: server
links:
- db
ports:
- '3000:3000'
volumes:
- ./server/dist:/app
# front end
dashboard:
build: dashboard
depends_on:
- server
ports:
- '80:80'
volumes:
- ./dashboard/angular/dist:/app
通过查看不同的建议,我尝试了以下命令:
docker-compose build
docker-compose down
docker-compose up
或
在这两种情况下,我都会遇到以下错误:
db_1 | The files belonging to this database system will be owned by user "postgres".
db_1 | This user must also own the server process.
db_1 |
server_1 | internal/modules/cjs/loader.js:834
server_1 | throw err;
server_1 | ^
server_1 |
server_1 | Error: Cannot find module 'typeorm'
server_1 | Require stack:
server_1 | - /app/server.js
server_1 | at Function.Module._resolveFilename (internal/modules/cjs/loader.js:831:15)
server_1 | at Function.Module._load (internal/modules/cjs/loader.js:687:27)
server_1 | at Module.require (internal/modules/cjs/loader.js:903:19)
server_1 | at require (internal/modules/cjs/helpers.js:74:18)
server_1 | at Object.<anonymous> (/app/server.js:15:19)
server_1 | at Module._compile (internal/modules/cjs/loader.js:1015:30)
server_1 | at Object.Module._extensions..js (internal/modules/cjs/loader.js:1035:10)
server_1 | at Module.load (internal/modules/cjs/loader.js:879:32)
server_1 | at Function.Module._load (internal/modules/cjs/loader.js:724:14)
server_1 | at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:60:12) {
server_1 | code: 'MODULE_NOT_FOUND',
server_1 | requireStack: [ '/app/server.js' ]
server_1 | }
db_1 | The database cluster will be initialized with locale "en_US.utf8".
db_1 | The default database encoding has accordingly been set to "UTF8".
db_1 | The default text search configuration will be set to "english".
db|属于此数据库系统的文件将由用户“postgres”拥有。
db_1 |此用户还必须拥有服务器进程。
db|U 1|
服务器| 1 |内部/modules/cjs/loader.js:834
服务器|抛出错误;
服务器|1|^
服务器|1|
服务器_1|错误:找不到模块“typeorm”
服务器| 1 |需要堆栈:
server_1 |-/app/server.js
服务器1位于Function.Module.\u解析文件名(internal/modules/cjs/loader.js:831:15)
服务器| at Function.Module._load(内部/modules/cjs/loader.js:687:27)
服务器|位于Module.require(内部/modules/cjs/loader.js:903:19)
服务器|根据需要(internal/modules/cjs/helpers.js:74:18)
服务器| 1 | at对象。(/app/server.js:15:19)
服务器1在模块处编译(internal/modules/cjs/loader.js:1015:30)
server_1| at Object.Module._extensions..js(internal/modules/cjs/loader.js:1035:10)
服务器_1|位于Module.load(内部/modules/cjs/loader.js:879:32)
服务器| at Function.Module._load(内部/modules/cjs/loader.js:724:14)
服务器|位于Function.executeUserEntryPoint[作为runMain](internal/modules/run_main.js:60:12){
服务器1代码:“未找到模块”,
服务器1 | requireStack:['/app/server.js']
服务器_1 |}
db_1 |数据库集群将使用区域设置“en_US.utf8”进行初始化。
db_1 |默认数据库编码相应地设置为“UTF8”。
db_1 |默认文本搜索配置将设置为“英语”。
当我单独构建服务器时,不会出现此错误
我做错了什么
需要更多信息吗?我也有类似的问题。解决了在packages.json中添加“typeorm”显式依赖项的问题。比如:
"dependencies": {
"typeorm": "^0.2.29"
...
}