Docker容器排查及常见故障处理

在使用Docker容器的过程中,难免会遇到各种各样的问题,如容器启动失败、容器运行异常、容器网络连接异常等。本文记录了一些Docker容器问题排查与故障处理的常用方法,可以快速定位和解决问题。

Docker是一种相对使用较简单的容器,我们可以通过以下几种方式获取信息:

  • 1、通过docker run执行命令,或许返回信息

  • 2、通过docker logs 去获取日志,做有针对性的筛选

  • 3、通过systemctl status docker查看docker服务状态

  • 4、通过journalctl -u docker.service 查看日志

1. 启动类故障

  • 1、docker未正常启动
1docker: Cannot connect to the Docker daemon at
2unix:///var/run/docker.sock. Is the docker daemon running ?

解决方式:

1systemctl start docker
  • 2、docker.sock不能创建
1can't create unix socket /var/run/docker.sock: is a directory

解决方式:

1rm -rf /var/run/docker.sock

然后重新启动docker

  • 3、Job for docker.service failed. Failed to start Docker Application

原因:Selinux引起

解决方式:

修改/etc/sysconfig/selinux , 把 selinux 值改为disabled

重启docker解决

  • 4、docker没有指定目录或文件
1docker: Error response from daemon:
2/var/lib/docker/overlay/XXXXXXXXXXXXXXXXXXXXXXX: no such file or
3directory.

解决方式:

1systemctl stop docker
2rm -rf /var/lib/docker/*
3systemctl start docker

重启run镜像启动容器

  • 5、docker name重名
1docker: Error response from daemon: Conflict. The container name
2"XXX" is already in use by container "XXX". You have to remove (or
3rename) that container to be able to reuse that name.

解决方式: 改名容器或者删除重建容器

  • 6、网卡配置问题
1Error: Connection activation failed: No suitable device found for this connection

解决方式:

重启网卡

  • 7、系统重启后docker无法启动
1docker0: iptables: No chain/target/match by that name
2ERROR: Encountered errors while bringing up the project.

images202401021948104.png
原因:docker服务iptables问题

解决方式:

重启docker服务system restart docker

  • 8、使用overlay2存储驱动启动docker daemon报错
1Error starting daemon: error initializing graphdriver: driver not supported

原因:daemon缺少配置

解决方式:

/etc/docker/daemon.json中添加以下配置:

1{"storage-driver": "overlay2",
2"storage-opts": ["overlay2.override_kernel_check=true"]}
  • 9、未知原因:docker 被mask

Failed to start docker.service: Unit docker.service is masked.

解决方式:

1systemctl unmask docker.service
2systemctl unmask docker.socket
3systemctl start docker.service
  • 10、docker容器重启故障

强杀docker进程后,重启docker。docker中的容器无法启动并报错

1docker restart XXXXXXX Error response from daemon: Cannot restart container XXXXXXX: container "XXXXXXXXXXXXXXXX": already exists

原因:旧容器未安全退出

解决方式:

1# 删除指定容器
2docker-containerd-ctr --address /run/docker/containerd/docker-containerd.sock --namespace c rm <容器hash_id>
3
4docker start 容器
  • 11、重启容器错误一直卡住

systemctl restart docker 卡住

可能是启动的容器数量过多,或者磁盘IO问题

解决方式:

1systemctl start docker-cleanup.service
2systemctl start docker

2. 权限类问题

2.1用户组问题

  • 12、Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

解决方式:

查看 /var/run/docker.sock所在用户组

将用户重新加入docker组中,usermod -aG docker ${USER}

  • 13、chown socket at step GROUP: No such process

原因:docker无法找到Group组信息,docker组有可能被误删除

解决方式:

1groupadd docker
  • 14、Post http:///var/run/docker.sock/v1.XXX /auth: dial unix /var/run/docker.sock: permission denied. Are you trying to connect to a TLS-enabled daemon without TLS?

原因:非Root用户管理Docker时,权限不足

解决方式:

1groupadd docker
2usermod -a -G docker user

3. 镜像仓库问题

原因:Docker仓库无法访问

解决方式:

修改Docker仓库源为国内或者自建的仓库源

修改/etc/docker/daemon.json

  • 16、/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go: starting container process caused "exec: "/bin/bash": executable file not found in $PATH".

原因:Docker镜像自身问题或者Docker引擎版本比较低导致

解决方式:

可以升级Docker版本服务