使用 docker-compose 后缺少依赖项
Missing dependencies after using docker-compose
我对 docker 还是很陌生,但我终于明白了 docker-compose 和普通 docker 命令之间的区别,我想为我的命令部署一些容器开发环境,其中包括一个带有 nest.js 的后端和一个 postgress 数据库(更进一步,我将包括一个 React App,也许还有 PGAdmin)。
当我 运行 使用 docker run
时,我的后端服务器的图像工作正常,但它看起来像 docker-compose
有问题,其中缺少一些依赖项(即使它们是正在安装 npm install
?)。
这是我的后端服务器的 docker 文件。
FROM node:14-alpine
WORKDIR /usr/src/app
COPY . .
# If I don't install nest's cli the app won't start telling me nest was not found.
RUN npm install -g @nestjs/cli
# Install all dependencies
RUN npm install
# package.json start script
CMD [ "npm", "run", "start:dev"]
这是我的 docker-compose
文件。
version: '3.7'
services:
backend:
container_name: nest_backend
build: .
volumes:
- .:/usr/src/app
- /usr/src/app/node_module
ports:
- ${PORT}:${PORT}
command: npm run start:dev
env_file:
- .env
networks:
- webnet
depends_on:
- postgres
postgres:
container_name: postgres
image: postgres:12
networks:
- webnet
environment:
POSTGRES_PASSWORD: ${RDS_PASSWORD}
POSTGRES_USER: ${RDS_USERNAME}
POSTGRES_DB: ${RDS_DB_NAME}
PG_DATA: /var/lib/postgresql/data
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- 5433:5432
networks:
webnet:
volumes:
pgdata:
这是我检查后端映像容器日志时的输出。
11:38:22 PM] Starting compilation in watch mode...
node_modules/@types/react-dom/index.d.ts:27:8 - error TS2307: Cannot find module 'react' or its corresponding type declarations.
27 } from 'react';
~~~~~~~
src/app.module.ts:1:24 - error TS2307: Cannot find module '@nestjs/common' or its corresponding type declarations.
1 import { Module } from '@nestjs/common';
~~~~~~~~~~~~~~~~
src/app.module.ts:3:31 - error TS2307: Cannot find module '@nestjs/typeorm' or its corresponding type declarations.
3 import { TypeOrmModule } from '@nestjs/typeorm';
~~~~~~~~~~~~~~~~~
src/app.module.ts:6:30 - error TS2307: Cannot find module '@nestjs/config' or its corresponding type declarations.
6 import { ConfigModule } from '@nestjs/config';
~~~~~~~~~~~~~~~~
src/app.module.ts:10:26 - error TS2307: Cannot find module '@ntegral/nestjs-s3' or its corresponding type declarations.
10 import { S3Module } from '@ntegral/nestjs-s3';
我的项目正在使用带有 yarn 工作区的 monorepo,这会造成任何问题吗?
一些事情 backend
:
volumes
覆盖 容器中的内容。我怀疑您可以从 backend
. 中完全删除 volumes
部分
command
与容器的 CMD
重复,是多余的。
你有几个问题。首先是你的盲卷挂载有错别字。它应该是 node_modules
(带有“s”)
volumes:
- ".:/usr/src/app"
- "/usr/src/app/node_modules"
第二个是您正在将所有文件复制到容器中。这是不必要的,因为您打算批量安装它们。
只需复制安装依赖项所需的文件
FROM node:14-alpine
WORKDIR /usr/src/app
# If I don't install nest's cli the app won't start telling me nest was not found.
RUN npm install -g @nestjs/cli
COPY package.json package-lock.json .
# Install all dependencies
RUN npm install
# package.json start script
CMD [ "npm", "run", "start:dev"]
我对 docker 还是很陌生,但我终于明白了 docker-compose 和普通 docker 命令之间的区别,我想为我的命令部署一些容器开发环境,其中包括一个带有 nest.js 的后端和一个 postgress 数据库(更进一步,我将包括一个 React App,也许还有 PGAdmin)。
当我 运行 使用 docker run
时,我的后端服务器的图像工作正常,但它看起来像 docker-compose
有问题,其中缺少一些依赖项(即使它们是正在安装 npm install
?)。
这是我的后端服务器的 docker 文件。
FROM node:14-alpine
WORKDIR /usr/src/app
COPY . .
# If I don't install nest's cli the app won't start telling me nest was not found.
RUN npm install -g @nestjs/cli
# Install all dependencies
RUN npm install
# package.json start script
CMD [ "npm", "run", "start:dev"]
这是我的 docker-compose
文件。
version: '3.7'
services:
backend:
container_name: nest_backend
build: .
volumes:
- .:/usr/src/app
- /usr/src/app/node_module
ports:
- ${PORT}:${PORT}
command: npm run start:dev
env_file:
- .env
networks:
- webnet
depends_on:
- postgres
postgres:
container_name: postgres
image: postgres:12
networks:
- webnet
environment:
POSTGRES_PASSWORD: ${RDS_PASSWORD}
POSTGRES_USER: ${RDS_USERNAME}
POSTGRES_DB: ${RDS_DB_NAME}
PG_DATA: /var/lib/postgresql/data
volumes:
- pgdata:/var/lib/postgresql/data
ports:
- 5433:5432
networks:
webnet:
volumes:
pgdata:
这是我检查后端映像容器日志时的输出。
11:38:22 PM] Starting compilation in watch mode...
node_modules/@types/react-dom/index.d.ts:27:8 - error TS2307: Cannot find module 'react' or its corresponding type declarations.
27 } from 'react';
~~~~~~~
src/app.module.ts:1:24 - error TS2307: Cannot find module '@nestjs/common' or its corresponding type declarations.
1 import { Module } from '@nestjs/common';
~~~~~~~~~~~~~~~~
src/app.module.ts:3:31 - error TS2307: Cannot find module '@nestjs/typeorm' or its corresponding type declarations.
3 import { TypeOrmModule } from '@nestjs/typeorm';
~~~~~~~~~~~~~~~~~
src/app.module.ts:6:30 - error TS2307: Cannot find module '@nestjs/config' or its corresponding type declarations.
6 import { ConfigModule } from '@nestjs/config';
~~~~~~~~~~~~~~~~
src/app.module.ts:10:26 - error TS2307: Cannot find module '@ntegral/nestjs-s3' or its corresponding type declarations.
10 import { S3Module } from '@ntegral/nestjs-s3';
我的项目正在使用带有 yarn 工作区的 monorepo,这会造成任何问题吗?
一些事情 backend
:
volumes
覆盖 容器中的内容。我怀疑您可以从backend
. 中完全删除 command
与容器的CMD
重复,是多余的。
volumes
部分
你有几个问题。首先是你的盲卷挂载有错别字。它应该是 node_modules
(带有“s”)
volumes:
- ".:/usr/src/app"
- "/usr/src/app/node_modules"
第二个是您正在将所有文件复制到容器中。这是不必要的,因为您打算批量安装它们。
只需复制安装依赖项所需的文件
FROM node:14-alpine
WORKDIR /usr/src/app
# If I don't install nest's cli the app won't start telling me nest was not found.
RUN npm install -g @nestjs/cli
COPY package.json package-lock.json .
# Install all dependencies
RUN npm install
# package.json start script
CMD [ "npm", "run", "start:dev"]