【发布时间】: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