CentOS7下Docker运行hello-world容器遇OCI runtime错误求助
解决CentOS 7上Docker运行
hello-world时的OCI Runtime错误 嘿,我看你在CentOS 7上用yum装完Docker 17.12.0-ce后,跑hello-world容器时碰到了OCI runtime的报错,从你提供的日志和系统信息来看,核心问题是runc工具版本缺失/不匹配,还有几个次要的配置警告也得处理下,我给你整理了一步步的解决方法:
第一步:修复runc版本问题
从你的docker info里能看到runc version: N/A,这可是Docker启动容器的核心依赖工具,版本不对直接导致容器启动失败:
- 先停掉Docker服务:
sudo systemctl stop docker - 卸载可能损坏的runc包:
sudo yum remove -y runc - 要么安装匹配的runc版本,要么直接重新安装Docker确保依赖完整:
- 安装指定runc版本:
sudo yum install -y runc-1.0.0-rc5.el7.x86_64 - 或者重新安装Docker(更稳妥,能自动拉取正确的依赖):
sudo yum reinstall -y docker-ce-17.12.0.ce-1.el7.centos
- 安装指定runc版本:
第二步:处理DeviceMapper的Loopback警告(可选但推荐)
你的Docker现在用的是loopback设备做存储,官方明确说生产环境别这么用,测试环境倒无所谓,但如果想彻底解决这个警告:
- 先准备一个LVM逻辑卷作为thin pool(替换
/dev/sdX为你的空闲磁盘):sudo pvcreate /dev/sdX sudo vgcreate docker_vg /dev/sdX sudo lvcreate --wipesignatures y -n thinpool docker_vg -l 95%VG sudo lvcreate --wipesignatures y -n thinpoolmeta docker_vg -l 1%VG sudo lvconvert -y --zero n -c 512K --thinpool docker_vg/thinpool --poolmetadata docker_vg/thinpoolmeta - 创建Docker配置文件
/etc/docker/daemon.json,指定用这个thin pool:{ "storage-driver": "devicemapper", "storage-opts": [ "dm.thinpooldev=/dev/mapper/docker_vg-thinpool", "dm.use_deferred_deletion=true", "dm.use_deferred_removal=true" ] } - 重启Docker让配置生效:
sudo systemctl daemon-reload sudo systemctl start docker
第三步:启用bridge-nf-call-iptables(解决网络警告)
这个设置能让Docker的桥接网络正常处理iptables规则,避免后续网络问题:
- 临时启用(重启后失效):
sudo sysctl net.bridge.bridge-nf-call-iptables=1 sudo sysctl net.bridge.bridge-nf-call-ip6tables=1 - 永久启用,创建
/etc/sysctl.d/docker.conf文件:
然后执行命令让配置立即生效:net.bridge.bridge-nf-call-iptables=1 net.bridge.bridge-nf-call-ip6tables=1sudo sysctl -p /etc/sysctl.d/docker.conf
验证修复
做完上面的步骤后,再跑一次hello-world试试:
sudo docker run hello-world
要是能看到熟悉的“Hello from Docker!”输出,说明问题就解决啦!
内容的提问来源于stack exchange,提问作者SaltedPork




