【问题标题】:Docker container fails on production serverDocker 容器在生产服务器上失败
【发布时间】:2020-12-30 19:21:45
【问题描述】:

我有带有 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的主要目的不就是让我不用担心依赖吗?

【问题讨论】:

  • 您如何在生产中部署?是在 swarm 上部署还是只是在服务器上运行 docker-compose?
  • @Carlos 刚刚运行 docker-compose up -d,在部署之前我用于在本地机器上进行测试的相同命令
  • 我假设您正在 prod 服务器上克隆您的 repo,然后从该文件夹中运行该命令?
  • @Carlos 是的,你是对的
  • 只是为了测试,你有没有试过在prod中运行时去掉volume声明?

标签: docker docker-compose dockerfile nestjs


【解决方案1】:

volumes: 会覆盖 Dockerfile 对本地系统内容所做的所有操作。当你去部署它时,生产系统在它的宿主文件系统中有不同的内容,所以图像内容会被不同的东西覆盖,你会得到不一致的结果。

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

【讨论】:

    猜你喜欢
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-07
    • 1970-01-01
    • 2022-08-17
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多