我有带有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的主要目的不是让我不用担心依赖关系吗?
答案 0 :(得分:4)
volumes:
使用本地系统中的内容覆盖Dockerfile所做的一切。当您部署它时,生产系统的主机文件系统中会有不同的内容,因此图像内容会被不同的内容所覆盖,从而导致结果不一致。
您应该从volumes:
文件中删除docker-compose.yml
。您也应该在开发系统上执行此操作,以便在执行本地集成测试时使用正在部署的实际映像。您可以使用本地Node安装进行日常开发。