Docker环境Node.js容器运行Gulp报Cannot find module问题求助
解决方案
1. 编写node.dockerfile内容
之前的空dockerfile缺少必要的基础配置,添加如下内容:
FROM node:12.19.1-alpine3.9 # 全局安装gulp-cli,解决命令找不到问题 RUN npm install -g gulp-cli@2.1.0 # 固定npm本地依赖安装路径,避免路径漂移 RUN npm config set prefix /usr/local # 可选:匹配本地用户UID,解决挂载卷读写权限问题,若本地当前用户UID不是1000可修改对应数值 RUN apk add --no-cache shadow && usermod -u 1000 node && groupmod -g 1000 node # 切换到非root用户运行,避免权限报错 USER node
2. 调整docker-compose.yml的node服务配置
node: build: context: . dockerfile: node.dockerfile container_name: nodejs depends_on: - nginx ports: - 3001:3000 volumes: - ./wordpress:/var/www/html:delegated # 不需要同步node_modules到本地的话可以保留下面的匿名卷,需要同步则删除 # - /var/www/html/wp-content/themes/the-theme/node_modules working_dir: /var/www/html/wp-content/themes/the-theme # 显式添加本地node组件执行路径到环境变量,优先读取项目内安装的依赖 environment: - PATH=/var/www/html/wp-content/themes/the-theme/node_modules/.bin:$PATH networks: - wordpress
3. 执行命令的正确流程
- 先清理历史错误生成的文件和缓存:
# 删除本地主题目录下异常的node_modules rm -rf ./wordpress/wp-content/themes/the-theme/node_modules # 清理npm缓存 docker-compose run --rm node npm cache clean --force
- 重新安装依赖:
docker-compose run --rm node npm install
- 执行gulp构建:
docker-compose run --rm node gulp build
问题根因说明
- 之前npm install路径异常是因为alpine版node镜像默认未配置npm安装前缀,非全局安装的依赖会被写入当前用户家目录而非工作目录
- 直接运行
docker-compose run --rm node gulp找不到命令,是因为docker执行单次命令时不会自动将当前目录下的node_modules/.bin加入PATH环境变量 - 权限报错是因为之前默认用root用户运行node进程,生成的文件权限和本地用户不匹配,切换到uid匹配的普通用户即可解决
内容的提问来源于stack exchange,提问作者Stuart Stiles
相关产品推荐
相关产品推荐

