MacOS下Docker部署MongoDB重启报chown权限错误如何解决
问题修复方案
根本原因
该报错是MacOS环境下Docker挂载本地目录的专属问题:
- MacOS的APFS文件系统会自动为所有文件生成带
._前缀的资源分支元数据文件,这类文件无法被Linux容器内部的chown命令修改权限 - 官方Mongo镜像启动时默认会执行chown操作,将
/data/db目录的所有者修改为容器内置的mongodb用户,遇到上述Mac专属元数据文件就会触发权限报错
可用修复方案
方案1:跳过Mongo镜像的默认权限调整步骤(推荐)
直接在docker-compose.yml的database服务配置中新增MONGO_SKIP_CHOWNDB=true环境变量,即可跳过镜像默认的chown操作,修改后的完整配置如下:
version: '3.9' services: database: user: 'root' image: 'mongo' container_name: 'database' environment: - MONGO_INITDB_DATABASE=TODODATABASE - MONGO_SKIP_CHOWNDB=true volumes: - ./mongo-volume:/data/db:rw ports: - '27017-27019:27017-27019'
修改完成后执行docker-compose up -d --force-recreate重启容器即可生效。
方案2:使用Docker命名卷替代本地挂载
如果你不需要直接从Mac系统访问Mongo的底层数据文件,可以将本地目录挂载替换为Docker自带的命名卷,从根源上避免Mac文件系统的权限冲突,修改后的配置如下:
version: '3.9' services: database: user: 'root' image: 'mongo' container_name: 'database' environment: - MONGO_INITDB_DATABASE=TODODATABASE volumes: - mongo-data:/data/db:rw ports: - '27017-27019:27017-27019' volumes: mongo-data:
临时应急方案
如果只是偶尔出现报错,不想修改配置,可以先执行以下两条命令删除本地数据目录中的Mac元数据文件,再重启容器即可:
xattr -c ./mongo-volume/* find ./mongo-volume -name "._*" -delete
内容的提问来源于stack exchange,提问作者DoctorFuchs
相关产品推荐
相关产品推荐

