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

Docker挂载NodeJS应用卷数据不持久、宿主修改未同步、node_modules缺失问题求助

问题原因&修复方案

问题1:宿主机代码修改后容器内未同步

根本原因是路径配置不统一:

  • Dockerfile中创建的用户名为dockuser,应用工作目录为/home/dockuser/src
  • docker-compose中挂载的本地目录对应容器路径为/home/dockeruser/src,多了一个字母e,两者指向完全不同的目录,修改自然不会同步到应用运行的实际目录。

问题2:容器内看不到构建阶段生成的node_modules

有两个关联错误:

  1. npm install执行目录和工作目录不一致:你在Dockerfile中先把package.json拷贝到容器根目录执行npm install,生成的node_modules存放在容器根路径,后续切换到/home/dockuser/src作为工作目录,自然找不到对应的依赖包。
  2. 宿主机目录覆盖容器内文件:你注释了node_modules的匿名卷挂载,直接把宿主机项目根目录挂载到容器工作目录时,会直接覆盖容器内该路径下的所有内容,就算node_modules生成在正确位置也会被宿主机空的node_modules目录(如果宿主机没装依赖)覆盖。

具体修复步骤

  1. 统一路径配置
    把docker-compose中nodeServer的volumes挂载路径修正为和Dockerfile一致,同时取消node_modules匿名卷的注释:
volumes:
  - .:/home/dockuser/src
  - node_modules:/home/dockuser/src/node_modules

同时删掉docker-compose中重复写的第二行restart: unless-stopped,避免冗余。

  1. 修正Dockerfile依赖安装逻辑
    调整Dockerfile的执行顺序,先创建工作目录再执行依赖安装:
FROM node:14.4-alpine3.11

RUN apk add --no-cache python g++ make
ENV NODE_ENV=development
RUN apk update && apk add bash

RUN addgroup -g 1010 -S docker && \
     adduser -u 1010 -S dockuser -G docker

# 提前创建工作目录并分配权限
RUN mkdir -p /home/dockuser/src && chown -R dockuser:docker /home/dockuser/src
WORKDIR /home/dockuser/src
USER dockuser

# 拷贝依赖清单到工作目录后执行安装
COPY ["package.json", "package-lock.json*", "npm-shrinkwrap.json*", "./"]
RUN npm install --production 

# 最后拷贝全量代码
COPY . /home/dockuser/src

EXPOSE 3000 8745
CMD ["/bin/sh", "entrypoint.sh"]
  1. 重新构建启动
    修改完成后执行以下命令即可:
docker-compose build --no-cache
docker-compose up

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 12:36:01