无需Dockerfile:Docker容器装Node.js依赖不生成主机node_modules且停后销毁
解决Docker-Compose启动后本地生成空node_modules及容器停后依赖自动销毁问题
问题背景
现有如下docker-compose配置:
version: "3.5" services: FronServer: image: node:16-alpine container_name: Example-Production-FrontServer working_dir: /var/www/example.com volumes: - .:/var/www/example.com - FrontServerDependencies:/var/www/example.com/node_modules:nocopy command: sh -c "echo 'Installing dependencies ...' \ && npm install --no-package-lock \ && node FrontServerEntryPoint.js --environment production" ports: [ "8080:8080" ] environment: - DATABASE_HOST=Database depends_on: [ Database ] Database: image: postgres container_name: Example-Production-Database ports: [ "5432:5432" ] environment: - POSTGRES_PASSWORD=pass1234 volumes: - DatabaseData:/data/example.com volumes: FrontServerDependencies: { driver: "local" } DatabaseData: {}
启动后本地主机会生成空的node_modules目录,需实现:无需额外编写Dockerfile,避免主机生成该目录,且容器停止后安装的node_modules自动销毁。
注:生产构建目录中的package.json与源码的package.json不同,开发依赖无需安装,前端依赖已预打包。
修改后的配置
version: "3.5" services: FronServer: image: node:16-alpine container_name: Example-Production-FrontServer working_dir: /var/www/example.com volumes: - .:/var/www/example.com # 用tmpfs临时挂载替代命名卷,容器停止后自动销毁内容 - type: tmpfs target: /var/www/example.com/node_modules command: sh -c "echo 'Installing dependencies ...' \ # 添加--production参数,只安装生产依赖 && npm install --no-package-lock --production \ && node FrontServerEntryPoint.js --environment production" ports: [ "8080:8080" ] environment: - DATABASE_HOST=Database depends_on: [ Database ] Database: image: postgres container_name: Example-Production-Database ports: [ "5432:5432" ] environment: - POSTGRES_PASSWORD=pass1234 volumes: - DatabaseData:/data/example.com volumes: DatabaseData: {}
关键修改说明
- 替换原命名卷为
tmpfs临时挂载:tmpfs是基于内存的临时文件系统,挂载到容器内的node_modules路径后,会覆盖绑定挂载中可能在本地生成的空目录,且容器停止时tmpfs内容会自动销毁,不会在主机留下任何文件。 - 给
npm install添加--production参数:匹配生产环境需求,只安装package.json中定义的生产依赖,跳过开发依赖,符合生产构建目录的特性。 - 删除无用的
FrontServerDependencies命名卷配置:因为已经用tmpfs替代,不再需要该持久化卷。
内容的提问来源于stack exchange,提问作者Takeshi Tokugawa YD
相关产品推荐
相关产品推荐

