Bug处理:MongoDB容器报错“Read security file failed. error opening file: /data/mongodb.key: bad file“
·
背景:
基于 Docker-compose 部署 mongodb 时,配置了副本集与key文件认证:
mongodb:
image: mongo:latest
container_name: mongodb
..
volumes:
- /xx/mongodb_data:/data/db
- /xx/mongodb.key:/data/mongodb.key # key文件的持久化存储
..
command: ["mongod", "--replSet", "rs0", "--auth", "--keyFile", "/data/mongodb.key"] # 开启副本集与ke文件认证
现象:
无法启动该容器,查看日志则显示以下错误:
{"t":{"$date":"2025-08-11T06:04:38.531+00:00"},"s":"I", "c":"ACCESS", "id":20254, "ctx":"main","msg":"Read security file failed","attr":{"error":{"code":30,"codeName":"InvalidPath","errmsg":"error opening file: /data/mongodb.key: bad file"}}}
原因:
MongoDB 对 keyFile 有严格的安全校验:文件必须仅对所有者可读(一般 400 或 600),且文件所有者必须与运行 mongod 的用户相同。而笔者的keyFile所有者如下所示:

在 mongo 容器里,mongodb 默认以 uid 999 运行。当把主机上的文件挂载进容器时,文件的所有者还是主机的 root。由于所有者不匹配,MongoDB 判定这个 keyfile 不安全,报 bad file/InvalidPath。
解决:
chown 999 /xx/mongodb.key
然后再重新启动容器:
docker-compose down && docker-compose up -d mongodb

执行后,文件所有者变成了和容器内的 mongod 一致,加上 400 权限就通过了 MongoDB 的安全检查。
更多推荐
所有评论(0)