- 故障记录
持续记录中…
更新时间:2022-05-16 故障记录
1、docker pull和docker run无镜像和容器
docker pull 以及docker run,看不到下载下来的镜像和启动的容器,但是去到/var/lib/docker目录下,又有对应的镜像和容器层。
故障原因
/var/lib/docker挂载的时间比dockerd启动时间更晚,dockerd使用docker pull和docker run命令使用的是未挂载/var/lib/docker的docker目录,而非现在挂载以后的/var/lib/docker
解决方法
dockerd启动要在挂载/var/lib/docker之后
2、docker-proxy僵尸
在其他容器中使用curl命令连接仓库镜像,无法curl通,但是在主机上使用curl命令连接仓库镜像可以curl通。原因是docker-proxy僵尸了。
故障原因
docker-proxy僵尸是由于kill -9 docker-proxy,直接杀死docker-proxy,但是dockerd在启动docker-proxy阶段没有使用wait方法等待子进程退出,dockerd无法回收docker-proxy。dockerd在stop阶段做了wait方法等待,可以在stop容器以后回收僵尸的docker-proxy。
对应的函数为
func (p *proxyCommand) Start() error {
...
}
func (p *proxyCommand) Stop() error {
...
go func() {
waitChan <- p.cmd.Wait()
}()
...
}
解决方法
使用docker restart容器(会调用docker stop容器,dockerd会回收该容器僵尸掉的docker-proxy【】),重新拉起容器即可。
3、k8s拉起容器名字冲突,无法成功拉起容器
拉起容器名字冲突,环境上存在大量Created状态容器,且未被清理。
故障原因
环境上存在14000多个Created状态的容器,k8s没有及时清理,docker日志中报错“清理失败,不存在该容器”。手动删除容器可以成功。
原因是环境的SSD固态硬盘没有挂载成功,docker运行在机械硬盘上,io速度太慢,导致k8s侧拉起容器超时,反复不停拉起容器。
解决方法
及时清理Created状态容器。如需要高并发,则挂载SSD固态硬盘提高系统io性能。
4、docker push镜像失败
push镜像失败,显示HTTP:500报错
故障原因
1、push镜像失败是由于镜像仓库配置的网络异常。报错received unexpected HTTP status: 500 Internal Server Error
2、docker日志中同样报错structure needs cleaning。表示文件系统故障。
自从报错structure needs cleaning文件系统故障以后,push镜像就一直不成功。
3、仓库容器registry为running状态。
4、查看registry容器日志,发现仓库容器报错ext4_find_dest_de:1815: inode #1181179: block 4727562: comm registry: bad entry in directory: rec_len % 4 != 0 - offset=0, inode=3671195736, rec_len=19238, name_len=228, size=4096。表示文件系统故障
故障原因为文件系统故障
解决方法
修复文件系统



