使用 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:

  1. volumes 覆盖 容器中的内容。我怀疑您可以从 backend.
  2. 中完全删除 volumes 部分
  3. 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"]