— Docker虚拟化故障 —
Docker虚拟化主要有三类故障:
应用故障:应用执行状态与预期不一致。
容器故障:无法正确创建、停止、更新容器等。
集群故障:集群创建失败、更新失败、无法连接等。
— Docker虚拟化故障排错 —
所有的Docker虚拟化故障排查诊断,都可以通过Docker命令行工具或者Web控制台来完成。
通过WEB控制台查看,需要自建控制台,对于Docker运维管理员来说,命令行工具排错是一个不错的帮手。
— 故障排错案例1 —
案例描述:
生产环境,全新安装的Docker无法启动,报错信息如下:
- systemctl start docker.service
- Job for docker.service failed because
- the control process exited with error code.See
- "systemctl status docker.service" and "journalctl -xe" for details
通过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 —
案例描述:
Docker虚拟化引擎报错信息如下:
chown socket at step GROUP: No such process
解决方案:
如上错误提示是因为Docker无法找到Group组信息,docker组有可能被误删除,解决方法有两种:
1.创建宿主机docker组即可,命令:groupadd docker;
2./usr/lib/systemd/system/docker.socket文件,SocketGroup=修改为root也可以;
— 故障排错案例3 —
案例描述:
Docker虚拟化引擎报错信息如下:
如上错误提示是因为Linux操作系统没有更多的Loopback 设备给Docker使用。
解决方案:
创建更多的Loopback设备即可,命令如下:
for i inseq 0 6;do mknod -m 0660 /dev/loop$i b 7 $i;done
— 故障排错案例4 —
案例描述:
Docker命令执行,报错如下:
- Cannot connect to the Docker daemon at unix:
- ///var/run/docker.sock. Is the docker daemon running?
根据如上错误提示,该错误很明显可能是docker没有启动。
解决方案:
检测docker进程是否启动,ps -ef|grep docker,如果没有启动,启动Docker即可。
检测Docker进程存在,但是无法连接,可以重启一下Docker服务,检测一下Sock路径是否正确;
— 故障排错案例5 —
案例描述:
Docker获取远程镜像,报错信息如下:
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,执行如下命令:
- at>/etc/docker/daemon.json<<EOF
-
- {
- "registry-mirrors":["https://registry.docker-cn.com"]
- }
- EOF
- service docker restart
— 故障排错案例6 —
案例描述:
启动Docker容器,报错信息如下:
/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引擎版本服务;
— 故障排错案例7 —
案例描述:
Docker虚拟化运行中,报错信息如下:
- Docker no space left on device
- Docker no space left on device
- Docker no space left on device
- Docker no space left on device
- Docker no space left on device
如上错误,表示Docker虚拟化引擎平台,没有多月的空间设备所使用,证明容器磁盘不足或者物理机磁盘不足。
解决方案:
手工删除Docker容器占用数据比较大的目录;
或者通过docker system prune自动删除一些日志目录,此种方法会停止所有容器;
或者临时增加Docker存储硬盘等;
— 故障排错案例8 —
案例描述:
Docker push上传镜像至本地仓库报错信息如下:
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。
解决方案:
vim /etc/docker/daemon.json 文件。
在文件中写入:{ "insecure-registries":["106.12.133.186:5000"] } 。
保存退出后,重启docker服务,问题即可解决。
— 故障排错案例9 —
案例描述:
Error response from daemon: service endpoint with name xxx already ex
端口或服务已经被占用,目前试了网上的方法还没解决,方法只能重启了。