Docker Ubuntu环境下MongoDB启动失败:Operation not permitted
解决Ubuntu 20.04 Docker环境启动MongoDB 6.x时的"Operation not permitted"错误
问题概述
在Ubuntu 20.04服务器的Docker环境中启动MongoDB容器时,出现致命错误:
mongo-db | {"t":{"$date":"2023-07-04T20:09:49.620+00:00"},"s":"F", "c":"CONTROL", "id":6384300, "ctx":"main","msg":"Writing fatal message","attr":{"message":"terminate() called. An exception is active; attempting to gather more information\n"}} mongo-db | {"t":{"$date":"2023-07-04T20:09:49.620+00:00"},"s":"F", "c":"CONTROL", "id":6384300, "ctx":"main","msg":"Writing fatal message","attr":{"message":"std::exception::what(): Operation not permitted\n**Actual exception type: std::system_error**\n\n"}}
使用的docker-compose配置如下:
version: "3" services: db: container_name: mongo-db image: mongo:latest networks: - mongo-backend networks: mongo-backend: external: true
该配置在开发环境正常运行,已排除数据目录权限问题,当前Docker版本为20.10.7,服务器内核版本为4.4.0。
核心原因分析
MongoDB 6.0及以上版本对Linux内核版本有最低要求:必须≥4.14,而当前服务器使用的是4.4.0版本,远低于要求,导致MongoDB启动时无法完成必要的系统调用,抛出"Operation not permitted"错误。
解决方案
方案1:升级服务器内核(推荐)
Ubuntu 20.04支持升级到5.4及以上的长期支持内核,步骤如下:
# 更新软件源 sudo apt update # 安装HWE内核(Ubuntu 20.04的硬件启用栈内核) sudo apt install --install-recommends linux-generic-hwe-20.04 # 重启服务器生效 sudo reboot # 验证内核版本(应显示5.4或更高) uname -r
重启后重新启动MongoDB容器即可。
方案2:降级MongoDB版本
如果无法升级内核,可改用兼容旧内核的MongoDB 5.0版本(最低要求内核3.10),修改docker-compose.yml:
version: "3" services: db: container_name: mongo-db image: mongo:5.0 # 替换为5.0版本 networks: - mongo-backend networks: mongo-backend: external: true
然后重新部署:
docker-compose down docker-compose up -d
方案3:调整Docker容器安全配置(临时 workaround)
若以上方案暂时无法实施,可尝试添加必要的系统权限或关闭AppArmor限制(不推荐用于生产环境):
修改docker-compose.yml:
version: "3" services: db: container_name: mongo-db image: mongo:latest networks: - mongo-backend # 添加系统权限 cap_add: - SYS_ADMIN - NET_ADMIN # 关闭AppArmor限制 security_opt: - apparmor:unconfined networks: mongo-backend: external: true
注意:该方案仅作为临时解决,内核版本过低仍可能导致其他稳定性问题。
内容的提问来源于stack exchange,提问作者CWeasel
相关产品推荐
相关产品推荐

