CentOS 7.9.2009的Plesk环境下Docker容器启动报错问题咨询
运行环境
- Plesk Obsidian Version 18.0.35
- CentOS Linux 7.9.2009
- Docker version 20.10.6, build 370c289
故障详情
原有MySQL Docker容器停止后无法启动,在Plesk界面启动容器时报错如下:
Error: {"message":"OCI runtime create failed: container_linux.go:380: starting container process caused: process_linux.go:545: container init caused: rootfs_linux.go:76: mounting \"/var/lib/docker/containers/23385a006794b8bd06cb112d5a9c8401d6bb78370e6e7e6adea8182b2205c624/resolv.conf\" to rootfs at \"/etc/resolv.conf\" caused: mount through procfd: possibly malicious path detected -- refusing to operate on /etc/resolv.conf: unknown"}
部署其他容器也出现相同报错,删除原有容器、重装Plesk Docker组件后问题仍存在。docker info命令输出截图如下:
故障根因
该报错是Docker 20.10.6版本内置的runc组件的路径校验逻辑bug导致,当宿主机/etc/resolv.conf为软链接时,runc会误判为恶意路径拒绝挂载。CentOS 7环境下如果启用了NetworkManager、或Plesk修改过网络配置,大概率会把/etc/resolv.conf设置为指向其他路径的软链接,触发该bug。
解决方案
按优先级尝试以下操作:
- 将resolv.conf改为普通文件
执行以下命令替换软链接为实际文件:
cp -L /etc/resolv.conf /etc/resolv.conf.tmp rm -f /etc/resolv.conf mv /etc/resolv.conf.tmp /etc/resolv.conf
执行完成后重启Docker服务:systemctl restart docker
重新尝试启动容器,90%以上的场景可通过该方法解决。
升级Docker版本
如果方法1无效,将Docker升级到20.10.10及以上稳定版本,该版本已修复runc的路径校验bug。Plesk环境下可直接通过Plesk组件更新功能升级Docker,或手动添加Docker官方源安装新版。手动指定容器DNS规避挂载
如果暂时无法升级Docker,可在容器启动参数中手动添加DNS配置,避免Docker自动挂载宿主机resolv.conf:
在启动命令中添加--dns 8.8.8.8 --dns 114.114.114.114参数,Plesk界面可在容器的「额外启动参数」配置项中添加上述内容。
内容的提问来源于stack exchange,提问作者Anatol
相关产品推荐
相关产品推荐

