Docker虚拟化主要有三类故障:

  1. 应用故障:应用执行状态与预期不一致。
  2. 容器故障:无法正确创建、停止、更新容器等。
  3. 集群故障:集群创建失败、更新失败、无法连接等。

1.1- Docker虚拟化故障排错

所有的Docker虚拟化故障排查诊断,都可以通过Docker命令行工具或者Web控制台【需要自建控制台】来完成。

2- 案例

2.1- 案例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,然后重启docker引擎。

2.2- 案例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。

2.3- 案例3

docker虚拟化服务报错信息如下:

docker[42113]:[error] attach_loopback.go:42 There are no more loopback devices available.
docker[42113]:  loopback mouting faild

原因: linux操作系统没有更多的loopback设备给docker使用。
解决方案:
创建更多的Loopback设备

for i inseq 0 6;do mknod -m 0660 /dev/loopib7ib7i;done

2.4- 案例4

Docker命令执行,报错如下:

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

解决方案:

  1. 检测docker进程是否启动,ps -ef|grep docker,如果没有启动,启动Docker。。
  2. 检测Docker进程存在,但是无法连接,可以重启一下Docker服务,检测一下Sock路径是否正确。

2.5- 案例5

Docker获取远程镜像,报错信息如下

Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io
# 该错误表示无法连接远程仓库Docker.io。

解决方案:

  1. 查看本地是否配置DNS,能否ping通docker.io;

  2. 如果能够ping通,但是下载还是比较慢,可以修改Docker仓库源为国内或者自建的仓库源;

  3. Docker镜像修改方法,vim /etc/docker/daemon.json,执行如下命令:

    cat>/etc/docker/daemon.json<<EOF
    {
    "registry-mirrors":["https://registry.docker-cn.com"]
    }
    EOF
    service docker restart

2.6- 案例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。

解决方案:

  1. 修改启动命令为正确的Docker容器启动命令,例如修改为:/bin/sh或者sleep 99999d等
  2. Docker镜像自身问题或者Docker引擎版本比较低导致,可以升级Docker引擎版本服务;

2.7- 案例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虚拟化引擎平台,没有多月的空间设备所使用,证明容器磁盘不足或者物理机磁盘不足。
解决方案:

  1. 手工删除Docker容器占用数据比较大的目录;
  2. 通过docker system prune自动删除一些日志目录,此种方法会停止所有容器;
  3. 临时增加Docker存储硬盘等;

2.8- 案例8

Docker push上传镜像至本地仓库报错信息如下:

The push refers to a repository [10.0.0.1:5000/busybox] Get https://10.0.0.1:5000/v1/_ping: http: server gave HTTP response to HTTPS client。

如上错误提示,错误是由于客户端采用https,docker registry未采用https服务所致。一种处理方式是把客户对地址“10.0.0.1:5000”请求改为http。
解决方案:

vim /etc/docker/daemon.json 文件。
在文件中写入:{ "insecure-registries":["10.0.0.1:5000"] } 。
保存退出后,重启docker服务,问题即可解决。

2.9- 案例9

Error response from daemon: service endpoint with name xxx already exit

解决方案:

  1. 首先删除 docker rm -f 实例名称
  2. docker rmi -f 镜像名称
  3. docker network disconnect --force bridge 实例名称
  4. docker network inspect bridge,查看网络是否存在