Docker中webpack-dev-server问题:本地node_modules目录为空
问题原因与解决方案
为什么宿主机器上的/root-app/dashboard/node_modules是空的?
这其实是Docker挂载卷的机制导致的,咱们一步步拆解:
- 容器构建阶段:你的
dashboard/Dockerfile里通过RUN yarn install在容器的/usr/src/app目录下生成了完整的node_modules,这部分是没问题的。 - 容器启动阶段:
docker-compose.yml里的两个volume配置起了作用:- ./dashboard:/usr/src/app:把宿主机器的./dashboard目录挂载到容器的/usr/src/app,此时宿主目录的内容会覆盖容器目录的对应内容,但有个例外——- /usr/src/app/node_modules:这是一个匿名卷,它会把容器内的/usr/src/app/node_modules目录独立出来,不被宿主挂载的目录覆盖,保证容器里的依赖能正常使用。
- 宿主目录出现空node_modules的原因:Docker为了保持容器内的目录结构一致,会自动在宿主的
./dashboard目录下创建node_modules目录,但这个目录只是一个空的占位符,因为容器里真正的node_modules存储在匿名卷中,不会同步到宿主目录。
如何解决(根据你的需求选择)
如果你希望宿主机器上也有完整的node_modules:
- 直接在宿主的
/root-app/dashboard目录下执行yarn install,手动生成依赖目录。 - 或者修改
docker-compose.yml的volume配置,把宿主的node_modules挂载到容器:
这种情况下,你可以去掉Dockerfile里的volumes: - ./dashboard:/usr/src/app - ./dashboard/node_modules:/usr/src/app/node_modulesRUN yarn install,直接在宿主安装依赖后共享给容器。
如果你不需要宿主机器上有node_modules:
- 完全不用管这个空目录!容器里的依赖是存储在匿名卷中的,不会影响应用运行,这个空目录只是Docker自动创建的占位符而已。
内容的提问来源于stack exchange,提问作者Pavel Perevezencev
相关产品推荐
相关产品推荐

