MacOS下Docker部署Odoo时--dev参数报错求助
解决MacOS下Docker运行Odoo时
--dev xml,reload的OSError问题 问题原因
MacOS的Docker Desktop基于HyperKit虚拟化,绑定卷(bind mount)的文件系统不支持Linux的inotify机制,而Odoo的--dev reload参数依赖该机制监听文件变化实现自动重载,因此触发OSError: Function not implemented错误。Ubuntu使用原生Linux内核,不存在这个限制,所以可以正常运行。
解决方案
方案1:移除reload参数
如果不需要自动重载功能,直接修改command行,去掉reload:
command: ["odoo","--dev","xml"]
这样仅启用XML热加载,不会触发文件监听逻辑,即可正常启动Odoo。
方案2:使用容器内文件系统(适合需要重载的开发场景)
如果需要自动重载功能,可将本地插件目录复制到容器内部,避免使用绑定卷:
- 修改Dockerfile,添加复制指令:
COPY ./extra-addons /mnt/custom-addons
- 移除docker-compose.yml中对应的绑定卷:
# 注释或删除这一行 # - ./extra-addons:/mnt/custom-addons
这样Odoo的文件监听可以正常工作,但本地修改后需要重新构建镜像。
方案3:使用文件同步工具(进阶)
可以使用docker-sync这类工具优化MacOS下的文件同步,让绑定卷支持类似inotify的功能,具体步骤:
- 安装docker-sync
- 配置sync.yml同步本地extra-addons目录到容器
- 用
docker-sync start配合docker-compose启动服务
这种方式既保留本地开发的实时修改,又能支持文件监听重载,但配置稍复杂。
内容的提问来源于stack exchange,提问作者Dương Ông Tùng
相关产品推荐
相关产品推荐

