一、简介
Docker 问题排查是一个系统性的过程,涉及到多个方面。需要一些排查技巧帮助我们更好的去进行问题排查与解决
二、docker 问题排查
1.docker 磁盘超负荷
1.1 通过 df -h 查看 系统磁盘使用详情
查看是否是docker造成的磁盘超负荷
1.2 通过docker info 查询docker 根目录
1.3 查看根目录磁盘占用情况
df -h /var/lib/docker
通过
du -d1 -h /var/lib/docker/containers | sort -h
列出
/var/lib/docker/containers
目录下每个子目录的磁盘使用情况,并按大小排序,这有助于识别占用空间较大的容器可以采取以下步骤进行清理:
列出所有容器:
- 使用
docker ps -a
列出所有容器,包括未运行的。停止并删除未使用的容器:
- 对于不再需要的容器,使用
docker stop <container_id>
停止容器,然后使用docker rm <container_id>
删除容器。清理悬空镜像:
- 使用
docker image prune
清理悬空镜像(未被任何容器使用的镜像)。删除未使用的镜像:
- 使用
docker image ls
列出所有镜像,然后根据需要使用docker rmi <image_id>
删除不再使用的镜像。清理卷和网络:
- 使用
docker volume prune
清理未使用的卷,使用docker network prune
清理未使用的网络。检查和删除隔离容器:
- 隔离容器是那些在创建过程中失败的容器,使用
docker ps -f "status=exited"
列出这些容器并删除。清理旧的或未使用的构建缓存:
- 如果使用 Docker 构建镜像,旧的构建缓存可能会占用空间,可以在构建时使用
--no-cache
选项。手动清理容器文件:
- 如果上述方法不能解决问题,可以手动检查
/var/lib/docker/containers/
目录下每个容器的文件,删除不必要的文件。扩展存储或清理其他目录:
- 如果
/var/lib/docker
目录整体占用空间很大,可能需要扩展存储容量或清理其他子目录,如镜像和卷的存储目录。使用 Docker 系统 prune 命令:
docker system prune
可以删除所有未使用的容器、镜像、网络和卷,释放空间。注意,这将删除所有悬空资源,使用时要小心。
1.4 查看镜像与容器磁盘的占用
docker system df -v
- ype: 类型,同样是 Images、Containers、Volumes 或 Networks。
- REPOSITORY: 镜像的仓库名称。
- TAG: 镜像的标签。
- IMAGE ID: 镜像的唯一标识符。
- CREATED: 镜像、容器或卷的创建时间。
- SIZE: 对于镜像和容器,表示它们占用的空间大小;对于卷和网络,可能显示为 "Shared"(共享)或实际大小。
- SHARED SIZE: 共享大小,表示多个容器或镜像共享的空间大小。
- UNIQUE SIZE: 唯一大小,表示不与其他镜像或容器共享的空间大小。
- NUMBER OF ITEM TYPES: 特定类型的对象数量。