You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker绑定挂载报错无法加载端口,找不到express模块求助

Docker Bind Mount启动容器报错:Cannot find module express

问题场景

在Windows系统上跟随MacOS环境的Docker教程实操,使用named volume创建容器时一切正常,但使用bind mount启动容器后端口无法访问,查看docker logs显示错误:Cannot find module express

相关信息

Dockerfile

FROM node:14

WORKDIR /app

COPY package.json /app

RUN npm install

COPY . /app

EXPOSE 80

CMD ["node", "server.js"]

项目路径

E:\downloads\Compressed\data-volumes-01-starting-setup

启动命令

  • Named Volume启动命令:
PS E:\downloads\Compressed\data-volumes-01-starting-setup> docker run -d -p 3000:80 --name feedback-container -v feedback-volume:/app/feedback  feedback-node
  • Bind Mount启动命令:
PS E:\downloads\Compressed\data-volumes-01-starting-setup> docker run -d -p 3000:80 --name feedback-container -v feedback:/app/feedback -v E:\downloads\Compressed\data-volumes-01-starting-setup:/app  feedback-node

环境信息

工具:VS Code;镜像名:feedback-node;容器名:feedback-container;卷名:feedback-volume

原因分析

使用bind mount将本地项目目录挂载到容器的/app目录时,本地目录中没有node_modules文件夹(镜像构建时npm install生成的node_modules在容器镜像内部,而本地项目通常不会把node_modules提交到版本库,或通过.gitignore忽略了该目录),挂载后本地目录覆盖了容器内/app下的所有内容,包括镜像中已安装的node_modules,导致Node.js找不到express模块。

解决方案

方法1:挂载匿名卷保留容器内的node_modules

在启动命令中添加一个指向/app/node_modules的匿名卷,Docker会优先使用容器镜像内的node_modules,不会被本地挂载覆盖:

PS E:\downloads\Compressed\data-volumes-01-starting-setup> docker run -d -p 3000:80 --name feedback-container -v feedback:/app/feedback -v E:\downloads\Compressed\data-volumes-01-starting-setup:/app -v /app/node_modules feedback-node

方法2:本地安装依赖(不推荐,可能存在跨平台问题)

在本地项目目录执行npm install,将依赖包下载到本地的node_modules目录,这样挂载后容器就能读取到本地的依赖:

PS E:\downloads\Compressed\data-volumes-01-starting-setup> npm install

之后再执行原来的bind mount启动命令即可。

内容的提问来源于stack exchange,提问作者Vidyasagar Ramachandran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:46:13