出处:https://mp.weixin.qq.com/s/2GNKmRJtBGHhUyVBRbRgeA
1 Docker虚拟化故障
Docker虚拟化主要有三类故障:
应用故障:应用执行状态与预期不一致。
容器故障:无法正确创建、停止、更新容器等。
集群故障:集群创建失败、更新失败、无法连接等。
2 Docker 虚拟化故障排错
所有的Docker虚拟化故障排查诊断,都可以通过Docker命令行工具或者Web控制台来完成。
通过WEB控制台查看,需要自建控制台,对于Docker运维管理员来说,命令行工具排错是一个不错的帮手。
2.1 案例1
案例描述:
生产环境,全新安装的Docker无法启动,报错信息如下:
1 | systemctl start docker.service |
通过journalctl -xe命令查看启动的详细日志,启动daemon错误,因为Selinux不支持,Selinux阻挡了Docker引擎的启动,如图所示:
解决方案:
如上问题,解决方法有两种:
1.Selinux主配置文件:
/etc/selinux/config,将配置文件中enforcing设置为disabled,然后重启系统,然后重启docker引擎即可。
2.docker主配置文件:
/etc/sysconfig/docker,将配置文件中–selinux-enabled选项为false,改成:–selinux-enabled=false即可。
2.2 案例2
案例描述:
Docker虚拟化引擎报错信息如下:
1 | chown socket at step GROUP: No such process |
解决方案:
如上错误提示是因为Docker无法找到Group组信息,docker组有可能被误删除,解决方法有两种:
1 | 1.创建宿主机docker组即可,命令:groupadd docker; |
2.3 案例3
案例描述:
Docker虚拟化引擎报错信息如下:
如上错误提示是因为Linux操作系统没有更多的Loopback 设备给Docker使用。
解决方案:
创建更多的Loopback设备即可,命令如下:
1 | for i inseq 0 6;do mknod -m 0660 /dev/loop$i b 7 $i;done |
2.4 案例4
案例描述:
Docker命令执行,报错如下:
1 | Cannot connect to the Docker daemon at unix: |
根据如上错误提示,该错误很明显可能是docker没有启动。
解决方案:
检测docker进程是否启动,ps -ef|grep docker,如果没有启动,启动Docker即可。
检测Docker进程存在,但是无法连接,可以重启一下Docker服务,检测一下Sock路径是否正确;
2.5 案例5
案例描述:
Docker获取远程镜像,报错信息如下:
1 | Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io |
该错误表示无法连接远程仓库Docker.io。
解决方案:
查看本地是否配置DNS,能否ping通docker.io;
如果能够ping通,但是下载还是比较慢,可以修改Docker仓库源为国内或者自建的仓库源;
Docker镜像修改方法,vim /etc/docker/daemon.json,执行如下命令:
1 | at>/etc/docker/daemon.json<<EOF |
2.6 案例6
案例描述:
启动Docker容器,报错信息如下:
1 | /usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/bin/bash\": executable file not found in $PATH". |
如上报错,通常是由于容器启动时,不支持该命令:/bin/bash。
解决方案:
解决方法有如下两种:
修改启动命令为正确的Docker容器启动命令,例如修改为:/bin/sh或者sleep 99999d等;
Docker镜像自身问题或者Docker引擎版本比较低导致,可以升级Docker引擎版本服务;
2.7 案例7
案例描述:
Docker虚拟化运行中,报错信息如下:
1 |
|
如上错误,表示Docker虚拟化引擎平台,没有多月的空间设备所使用,证明容器磁盘不足或者物理机磁盘不足。
解决方案:
手工删除Docker容器占用数据比较大的目录;
或者通过docker system prune自动删除一些日志目录,此种方法会停止所有容器;
或者临时增加Docker存储硬盘等;
2.8 案例8
案例描述:
Docker push上传镜像至本地仓库报错信息如下:
1 | The push refers to a repository [106.12.133.186:5000/busybox] Get https://106.12.133.186:5000/v1/_ping: http: server gave HTTP response to HTTPS client |
根据如上错误提示,错误是由于客户端采用https,docker registry未采用https服务所致。一种处理方式是把客户对地址“106.12.133.186:5000”请求改为http。
解决方案:
1 |
|
保存退出后,重启docker服务,问题即可解决。