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.
解决方式:
重启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. 镜像仓库问题
- 15、Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io
原因: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版本服务