简体   繁体   中英

Nest js Docker Cannot find module dist/main

I am building a Nest.js App using Docker-compose. The problem is when I tried "docker-compose up prod" then it shows "Error: Cannot find module '/usr/src/app/dist/main." Thus, I explored the files in the image of the prod, but I could find the dist folder. Also, I run dist/main and it works. However, I tried docker-compose up prod, it shows the above error. 在此处输入图片说明

Moreover, when I tried "docker-compose up dev." It works perfectly, making a dist folder to the host machine. The main difference between the dev and prod is the command that dev is using npm run start:dev, but prod is using npm run start:prod.

This is My 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"]

This is my 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:```

Ok... I found the solution. At the docker-compose.yaml, .:/usr/src/app should be removed from the volumes of the service "prod." Since the "dist" folder does not exist in the local machine, if the current local directory is mounted, then it shows Not found error. Guess I should study volume much deeper.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM