执行docker-compose up时出现npm No such file or directory错误如何解决
Docker Compose 启动npm报错修复方案
错误根因
你遇到的报错核心有两个问题:
- 容器运行时工作目录不对,npm找不到
/usr/src/osjs/package.json文件 - 宿主挂载的文件权限和容器内运行用户(node用户)的权限不匹配,导致npm写入文件时触发EACCES权限拒绝
修复步骤
1. 补全docker-compose.yml的工作目录配置
在你的my-docker-compose.yml的hafez服务下新增working_dir配置,指定npm运行的工作目录:
version: "3" services: hafez: image: hafez/hafez:version1.1 restart: always container_name: hafez working_dir: /usr/src/osjs # 新增这行,指定工作目录 ports: - 8000:8000 volumes: - ./config1.js:/usr/src/osjs/src/client/config.js - ./config2.js:/usr/src/osjs/src/server/config.js
2. 修复权限不匹配问题
两种方案可选:
- 测试环境快速验证方案:直接用root用户运行容器,在服务下新增
user: root配置即可:services: hafez: # 其他配置不变 user: root # 新增这行 - 生产环境标准方案:对齐宿主文件和容器内node用户的UID/GID
- 先查询容器内node用户的UID:
docker run --rm --entrypoint bash hafez/hafez:version1.1 -c "id -u node",假设返回值为1000 - 修改本地myDirectory目录下所有文件的所有者:
sudo chown -R 1000:1000 /你的/myDirectory/本地路径/*
- 先查询容器内node用户的UID:
3. (可选)补全启动命令
如果修改完后仍然报错nodemon使用错误,说明commit镜像时没有保留原容器的启动命令,新增command配置指定启动脚本:
services: hafez: # 其他配置不变 command: npm run start # 替换为你原正常容器的启动命令,比如开发环境是npm run dev
4. 验证启动
执行以下命令重启容器:
# 先清理之前创建的异常容器 docker-compose -f my-docker-compose.yml down -v # 重新启动 docker-compose -f my-docker-compose.yml up
内容的提问来源于stack exchange,提问作者Mahsa Shadi
相关产品推荐
相关产品推荐

