【问题标题】:Nest js Docker Cannot find module dist/mainNest js Docker 找不到模块 dist/main
【发布时间】:2021-10-01 20:34:07
【问题描述】:

我正在使用 Docker-compose 构建一个 Nest.js 应用程序。 问题是当我尝试“docker-compose up prod”时,它显示“错误:找不到模块'/usr/src/app/dist/main。” 因此,我浏览了产品映像中的文件,但我可以找到 dist 文件夹。另外,我运行 dist/main 并且它可以工作。但是,我尝试了 docker-compose up prod,它显示了上述错误。

此外,当我尝试“docker-compose up dev”时。它完美地工作,为主机创建一个 dist 文件夹。 dev 和 prod 的主要区别在于 dev 使用 npm run start:dev 的命令,而 prod 使用 npm run start:prod 的命令。

这是我的 DockerFile


WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install rimraf
RUN npm install --only=development
COPY . .

RUN npm run build

FROM node:12.19.0-alpine3.9 as production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install --only=production
COPY . .
COPY --from=development /usr/src/app/dist ./dist
CMD ["node", "dist/main"]

这是我的 docker-compose.yaml


services:
    proxy:
        image: nginx:latest # 최신 버전의 Nginx 사용
        container_name: proxy # container 이름은 proxy
        ports:
            - '80:80' # 80번 포트를 host와 container 맵핑
        networks:
            - nestjs-network
        volumes:
            - ./proxy/nginx.conf:/etc/nginx/nginx.conf # nginx 설정 파일 volume 맵핑
        restart: 'unless-stopped' # 내부에서 에러로 인해 container가 죽을 경우 restart
        depends_on: 
            - prod
    dev:
        container_name: nestjs_api_dev
        image: nestjs-api-dev:1.0.0
        build:
            context: .
            target: development
            dockerfile: ./Dockerfile
        command: npm run start:dev #node dist/src/main #n
        ports:
            - 3001:3000
        networks:
            - nestjs-network
        volumes:
            - .:/usr/src/app
            - /usr/src/app/node_modules
        restart: unless-stopped
    prod:
        container_name: nestjs_api_prod
        image: nestjs-api-prod:1.0.0
        build:
            context: .
            target: production
            dockerfile: ./Dockerfile
        command: npm run start:prod
        # ports:
        #     - 3000:3000
        #     - 9229:9229
        expose:
            - '3000' # 다른 컨테이너에게 3000번 포트 open
        networks:
            - nestjs-network
        volumes:
            - .:/usr/src/app
            - /usr/src/app/node_modules
        restart: unless-stopped
networks:
    nestjs-network:```

【问题讨论】:

    标签: node.js docker docker-compose nestjs


    【解决方案1】:

    好的...我找到了解决方案。 在 docker-compose.yaml 中,应该从服务“prod”的卷中删除 .:/usr/src/app。由于本地机器中不存在“dist”文件夹,如果当前本地目录已挂载,则显示未找到错误。我想我应该更深入地研究音量。

    【讨论】:

    • 您应该可以完全删除 volumes: 部分。您也不希望将 node_modules 树存储在匿名卷中(导致 Docker 忽略对 package.json 的更改)。
    猜你喜欢
    • 2021-10-07
    • 2021-11-30
    • 2020-04-08
    • 2022-07-05
    • 1970-01-01
    • 2017-04-23
    • 2019-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多