解决一个在实际工作部署 的一个问题 “OCI runtime create failed“

在工作中遇到Docker容器无法启动的问题,检查后发现没有容器日志且映射路径正常。经前辈指导,使用`setenforce 0`命令临时禁用SELinux,解决了启动错误。SELinux是加强Linux安全的子系统,`setenforce`命令用于切换其执行模式。永久关闭SELinux需修改`/etc/selinux/config`文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

解决一个在实际工作部署 的一个问题

1、首先 查看 所有的容器发现 容器并没有启动。
2、通过查看docker logs mysql 发下并没有容器日志可以打印,所以在这里思考,这个容器从一开始就没有启动,
3、查看 所有的 宿主机 和 docker 映射的路径,是否创建

以上3步骤都做过以后,发现 还是启动错误:

通过公司长辈提出解决方案:
使用 这条命令成功解决
在这里插入图片描述

命令临时生效:
setenforce 0 (临时生效可以直接用setenforce 0 )
            1 启用
            0 告警,不启用

通过百度发现 这个所谓的setenforce 到底是什么 ?转载
传送门
SELinux(Security-Enhanced Linux) 是美国国家安全局(NSA)对于强制访问控制的实现,是 Linux历史上最杰出的新安全子系统。

命令临时生效:
setenforce 0 (临时生效可以直接用setenforce 0 )
            1 启用
            0 告警,不启用

永久生效的方法

# 操作前先备份
  cp /etc/selinux/config /etc/selinux/config.bak
  cat /etc/selinux/config
#     SELINUX= can take one of these three values:
#     enforcing - SELinux security policy is enforced.
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.
 
# 更改setlinux级别
sed -i 's/SELINUX=enforcing/\SELINUX=permissive/' /etc/selinux/config
     ==> vim /etc/selinux/config/  --> SELINUX=enforcing[效果同上]
  # SELINUX参数enforcing代表打开,disabled代表关闭
# 查看selinux状态:
   getenforce
<think>嗯,用户遇到了OCI runtime create failed的错误,需要解决。我之前看过几个相关的引用,现在得仔细看看这些引用里的解决方案。首先,引用3提到是SELinux未关闭导致的,需要修改配置文件并重启。这可能是一个常见原因,特别是如果用户的环境启用了SELinux的话。然后引用4提到了调整kernel.pid_max参数,通过sysctl命令来增加进程数限制,这可能和系统资源有关。另外引用1和2可能还有其他的解决方法,比如检查Docker配置或者运行时参数。 用户的问题是如何解决这个错误,所以需要综合这些引用中的解决方案,并按照步骤来排列。首先应该检查SELinux状态,这是引用3的建议。如果SELinux是启用的,关闭它可能解决问题。接下来是进程数限制,引用4中的方法可以临时或永久调整pid_max。然后可能需要检查Docker配置,比如运行时是否正确,或者更新Docker版本,如引用2提到的。此外,磁盘空间和权限问题也是常见的原因,需要检查这些方面。最后,如果问题依旧,查看详细日志来定位具体原因。 需要确保步骤清晰,用户能够逐步操作。同时要注意命令的正确性,比如修改SELinux配置文件后必须重启,而sysctl命令可能需要永久写入配置文件。另外,提醒用户备份配置文件,避免操作失误。可能还需要解释每个步骤的原因,比如为什么SELinux会导致这个错误,或者pid_max的影响是什么,但用户可能更关心解决步骤,所以保持简洁。最后生成相关问题,帮助用户进一步排查其他可能性,比如容器配置、资源限制或镜像问题。</think>### OCI runtime create failed 错误解决方案 #### 1. 检查并关闭 SELinux 此错误常由 **SELinux 安全模块未关闭**引起(尤其在 CentOS/RHEL 系统中)[^3]: ```bash # 查看 SELinux 状态 sestatus # 修改配置文件永久关闭 sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config # 重启系统生效 sudo reboot ``` #### 2. 调整系统进程数限制 若系统进程数达到上限(`kernel.pid_max`),需临时或永久调整[^4]: ```bash # 临时调整(立即生效) sudo sysctl -w kernel.pid_max=100000 # 永久生效:在 /etc/sysctl.conf 添加 echo "kernel.pid_max=100000" | sudo tee -a /etc/sysctl.conf sudo sysctl -p ``` #### 3. 检查 Docker 运行时配置 确认 Docker 默认运行时为 `runc`(避免与其他容器运行时冲突)[^2]: ```bash # 查看 Docker 配置 sudo docker info | grep "Default Runtime" # 若为空或非 runc,编辑 /etc/docker/daemon.json { "default-runtime": "runc" } # 重启 Docker sudo systemctl restart docker ``` #### 4. 清理容器残留文件 磁盘空间不足或残留文件可能导致异常: ```bash # 清理未使用的容器、镜像和卷 sudo docker system prune -a -f # 检查磁盘空间 df -h ``` #### 5. 更新 Docker 和 runc 版本 版本兼容性问题可能触发 OCI 错误[^1]: ```bash # 升级 Docker sudo apt-get update && sudo apt-get upgrade docker-ce # 安装最新 runc sudo apt-get install runc ``` #### 6. 查看详细日志定位问题 通过日志分析具体错误原因[^1]: ```bash # 查看容器启动日志 sudo journalctl -u docker.service --since "5 minutes ago" # 或直接运行容器时输出日志 sudo docker run --log-level=debug <镜像名> ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值