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

Docker卷挂载后本地生成空node_modules文件夹问题求助

Docker卷挂载问题:本地自动生成空node_modules文件夹

终端操作记录

root@iZ2zee46sbqa371vzyq1jpZ:~/docker_learning/volumes_learning/data-volumes-02-added-dockerfile# cat Dockerfile 
FROM node:14

WORKDIR /app

COPY package.json .

RUN npm install

COPY . .

EXPOSE 80

CMD ["npm", "start"]


root@iZ2zee46sbqa371vzyq1jpZ:~/docker_learning/volumes_learning/data-volumes-02-added-dockerfile# docker build -t feedbackimg .
[+] Building 0.3s (10/10) FINISHED                                                                                      docker:default
 => [internal] load build definition from Dockerfile                                                                              0.0s
 => => transferring dockerfile: 145B                                                                                              0.0s
 => [internal] load metadata for docker.io/library/node:14                                                                        0.0s
 => [internal] load .dockerignore                                                                                                 0.0s
 => => transferring context: 2B                                                                                                   0.0s
 => [1/5] FROM docker.io/library/node:14                                                                                          0.0s
 => [internal] load build context                                                                                                 0.0s
 => => transferring context: 369B                                                                                                 0.0s
 => CACHED [2/5] WORKDIR /app                                                                                                     0.0s
 => CACHED [3/5] COPY package.json .                                                                                              0.0s
 => CACHED [4/5] RUN npm install                                                                                                  0.0s
 => [5/5] COPY . .                                                                                                                0.0s
 => exporting to image                                                                                                            0.1s
 => => exporting layers                                                                                                           0.0s
 => => writing image sha256:c6c67ae9a59c9d34ce2d59216eae2e6df2fe0c67366319d4e3095bd60bfe66b9                                      0.0s
 => => naming to docker.io/library/feedbackimg                                                                                    0.0s


root@iZ2zee46sbqa371vzyq1jpZ:~/docker_learning/volumes_learning/data-volumes-02-added-dockerfile# ls
Dockerfile  feedback  node_modules  package.json  pages  public  server.js  temp


root@iZ2zee46sbqa371vzyq1jpZ:~/docker_learning/volumes_learning/data-volumes-02-added-dockerfile# rm -r node_modules/


root@iZ2zee46sbqa371vzyq1jpZ:~/docker_learning/volumes_learning/data-volumes-02-added-dockerfile# ls
Dockerfile  feedback  package.json  pages  public  server.js  temp

root@iZ2zee46sbqa371vzyq1jpZ:~/docker_learning/volumes_learning/data-volumes-02-added-dockerfile# docker run -p 8000:80 -d --rm --name feedback-app -v feedback:/app/feedback -v "/root/docker_learning/volumes_learning/data-volumes-02-added-dockerfile:/app" -v /app/node_modules feedbackimg
d0f9829868ad5e39a780afd13dc00f8e89848a8323a396fe19fa9d1b14f25ef0


root@iZ2zee46sbqa371vzyq1jpZ:~/docker_learning/volumes_learning/data-volumes-02-added-dockerfile# ls
Dockerfile  feedback  node_modules  package.json  pages  public  server.js  temp

问题描述

执行上述docker run命令后,本地目录自动生成了空的node_modules文件夹,与预期不符。

个人理解

  • 卷按「路径长度」优先级管理;
  • 指向/app的绑定挂载路径最短,优先级最低,/app/feedback和/app/node_modules卷优先级更高;
  • Dockerfile生成的容器内node_modules不会通过绑定挂载映射到本地。

操作目的

  1. 空feedback目录的内容需保存到卷中,不被绑定挂载覆盖;
  2. 本地无node_modules,依赖容器内npm install生成的对应目录。

问题原因与解决方案

核心问题

  1. 匿名卷不会复制镜像内容:你用了匿名卷-v /app/node_modules,Docker仅会对命名卷在首次挂载时自动复制镜像对应路径的内容,匿名卷不会,所以这个卷是空的。
  2. 绑定挂载双向同步:容器内/app绑定挂载到本地目录,空的匿名卷/app/node_modules会通过双向同步在本地生成空文件夹。
  3. 挂载优先级理解错误:Docker卷的优先级是后挂载的覆盖先挂载的,而非路径长度,不过这不是本次问题的核心。

解决方案

将/app/node_modules改为命名卷,确保首次启动时镜像内的依赖目录被复制到卷中,同时避免本地同步空文件夹。修改后的docker run命令如下:

docker run -p 8000:80 -d --rm --name feedback-app \
  -v feedback:/app/feedback \
  -v node_modules:/app/node_modules \
  -v "/root/docker_learning/volumes_learning/data-volumes-02-added-dockerfile:/app" \
  feedbackimg

验证步骤

  1. 删除本地已生成的空node_modules文件夹;
  2. 执行上述修改后的启动命令;
  3. 查看本地目录,不会再生成node_modules;
  4. 进入容器执行ls /app/node_modules,能看到完整的依赖文件;
  5. 提交反馈后,内容会保存到命名卷feedback中,不会被绑定挂载覆盖。

内容的提问来源于stack exchange,提问作者夏浅沫

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 14:25:18