docker-compose在朋友Linux设备运行失败,报错挂载路径必须为绝对路径
报错原因
你遇到的报错根源是docker-compose.yml中卷挂载配置不符合规范:
Docker卷挂载短语法的规则为:
- 绑定挂载格式为
宿主机路径:容器内绝对路径 - 仅声明匿名卷时,只需要写容器内的绝对路径,不需要指定宿主机路径
你配置中volumes段的第二条./node_back/node_modules是相对路径:
- 若Docker将其判定为宿主机路径:你没有指定对应的容器内挂载路径,校验不通过
- 若Docker将其判定为容器内路径:相对路径不符合容器内挂载路径必须为绝对路径的要求
最终就抛出了invalid mount path: 'node_back/node_modules' mount path must be absolute的错误。
本机可正常运行的原因
这是Docker Compose版本差异导致的兼容问题:
- 你本地使用的是旧版Docker Compose,对这种不规范的相对路径匿名卷声明做了兼容,会自动和容器内WORKDIR
/app拼接处理,同时你本地存在./node_back/node_modules目录,所以可以正常运行 - 你朋友使用的是新版Docker Compose,已经移除了这类不规范语法的兼容,且他拉取的代码里一般不会包含
node_modules目录,所以直接触发报错。
修复方案
把volumes段的第二条修改为容器内的绝对路径即可:
volumes: - ./node_back:/app - /app/node_modules
修改后会创建匿名卷挂载到容器内的/app/node_modules目录,既可以避免宿主机的node_modules覆盖镜像内安装的依赖,也不会把容器内的依赖同步回宿主机,是Node.js项目Docker开发环境的标准配置。
内容的提问来源于stack exchange,提问作者Antoine
相关产品推荐
相关产品推荐

