Docker容器在生产服务器上失败

时间:2020-09-12 14:02:38

标签: docker docker-compose dockerfile nestjs

我有带有nestjs应用程序的docker容器。这是我的dockerfile

FROM node:14-alpine

WORKDIR /usr/src/app

COPY . .

RUN npm install

EXPOSE 3001

CMD ["npm", "run", "start:prod"]

这是docker-compose中的部分

backend:
container_name: backend
networks:
  - web
  - internal
environment:
  - DB_PASS=pass
  - DB_HOST=database
  - DB_USER=postgres
  - DB_NAME=postgres
  - DB_PORT=5432
  - NODE_ENV=production
  - VERSION=1.0
build:
  context: .
  dockerfile: Dockerfile
depends_on:
  - database
labels:
  - "traefik.enable=true"
  - "traefik.port=3001"
  - "traefik.docker.network=web"
  - "traefik.http.routers.backendo.entrypoints=http,https"
  - "traefik.http.routers.backendo.rule=Host(`mydomain.example`)"
  - "traefik.http.routers.backendo.tls=true"
  - "traefik.http.routers.backendo.tls.certresolver=letsEncrypt"
volumes:
  - .:/usr/src/app

当我尝试在生产服务器上运行此容器时,它会失败并显示错误

internal/modules/cjs/loader.js:896
throw err;
^

Error: Cannot find module '/usr/src/app/dist/main'
at Function.Module._resolveFilename (internal/modules/cjs/loader.js:893:15)
at Function.Module._load (internal/modules/cjs/loader.js:743:27)
at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:72:12)
at internal/main/run_main_module.js:17:47 {
code: 'MODULE_NOT_FOUND', 
requireStack: []

但是在我的本地计算机上,它工作正常。 我想知道为什么相同的docker-compose文件会有不同的结果。 Docker的主要目的不是让我不用担心依赖关系吗?

1 个答案:

答案 0 :(得分:4)

volumes:使用本地系统中的内容覆盖Dockerfile所做的一切。当您部署它时,生产系统的主机文件系统中会有不同的内容,因此图像内容会被不同的内容所覆盖,从而导致结果不一致。

您应该从volumes:文件中删除docker-compose.yml。您也应该在开发系统上执行此操作,以便在执行本地集成测试时使用正在部署的实际映像。您可以使用本地Node安装进行日常开发。