记一次docker启动失败的问题排查:Error response from daemon: oci runtime error: container_linux.go:290: starting container process caused "process_linux.go:369: container init caused \"write /proc/sys/kernel/shmmni: invalid argument\""
问题背景
以前在虚拟机上安装了一个docker,可以正常使用的,今天突然宿主机机器内存条坏了,换了内存条后启动机器,再使用systemctrl start docker启动docker,最后使用docker start containID启动报错
问题原因
网上没有找到相应的描述,仔细分析看是write /proc/sys/kernel/shmmni报错了,错误原因是invalid argument。
因此cat /proc/sys/kernel/shmmni查看内容为4096,然后试着写一个大的数进去,执行echo 40960 > /proc/sys/kernel/shmmni果然报错了。
猜测是因为docker启动时写整个文件导致的报错。
记得docker启动是有配置过shmmni的值,在**/var/lib/docker/containers/具体的containerID**
下的hostconfig.json中配置了kernel.shmmni":“40960”。
解决办法
- systemctrl stop docker 关闭docker服务
- 修改hostconfig.json中的kernel.shmmni":“4096”
- systemctrl start docker 开启docker服务
- docker start containID启动容器,正常启动