跳到主要内容

Docker存储空间清理

/var/lib/docker/overlay2 是 Docker 用来存储容器镜像层和容器数据的目录。如果这个目录占用了大量空间,可以通过以下方法清理不必要的数据,但要小心操作,避免影响正在运行的容器。

1. 检查是否有不需要的容器和镜像

首先,确认是否有不再使用的容器和镜像:

  • 列出所有容器:

    docker ps -a

    删除不需要的容器:

    docker rm <container_id>
  • 列出所有镜像:

    docker images

    删除未使用的镜像:

    docker rmi <image_id>

2. 清理未使用的资源

Docker 提供了命令来清理未使用的资源(镜像、容器、网络和挂载卷):

docker system prune

如果你希望清理得更彻底,包括未使用的卷,可以使用:

docker system prune -a --volumes

注意: 这个命令会删除所有未被使用的镜像、容器、网络和卷,请确保没有需要保留的内容。


3. 检查和清理 OverlayFS 的占用

/var/lib/docker/overlay2 是 Docker 的存储驱动目录,用于存储容器的层。如果你发现这里占用很大,可能是因为:

  • 容器未正确停止或清理:确保不需要的容器已经停止并删除。
  • 日志文件过大:检查容器日志是否占用过多空间。
    du -sh /var/lib/docker/containers/*/*-json.log
    清理日志:
    echo "" > /var/lib/docker/containers/<container_id>/<container_id>-json.log

4. 重建 Docker 数据目录(谨慎操作)

如果你确认可以清空整个 /var/lib/docker 目录,可以通过以下步骤重建数据目录:

  1. 停止 Docker 服务:
    systemctl stop docker
  2. 删除 /var/lib/docker 目录:
    rm -rf /var/lib/docker
  3. 重启 Docker 服务:
    systemctl start docker

注意: 这样会删除所有的容器和镜像,请确保提前备份需要的数据。


5. 定期清理建议

为了避免空间占用过大,可以定期清理 Docker 的未使用资源:

  • 使用 docker system prune 定期清理。
  • 使用 --log-opt max-size--log-opt max-file 限制日志文件的大小。
  • 使用 docker-compose 或其他工具管理容器,方便快速重建。

如果你不确定是否可以清理某些数据,请先备份或咨询相关管理员,避免误删重要内容。

这个警告提示是正常的,说明虽然你停止了 docker.service,但由于 docker.socket 仍然处于激活状态,Docker 服务可能会被再次启动。这是因为 docker.socket 是一个监听套接字,用于按需启动 Docker 服务。

解决方法:

如果你希望完全停止 Docker 服务并确保它不会被自动启动,可以按照以下步骤操作:


1. 停止 docker.servicedocker.socket

同时停止服务和套接字:

systemctl stop docker.service docker.socket

2. 禁用 docker.servicedocker.socket

如果你想防止 Docker 在系统重启或其他情况下被自动启动,可以禁用它们:

systemctl disable docker.service docker.socket

3. 确认状态

检查 Docker 服务和套接字是否已完全停止:

systemctl status docker.service docker.socket

输出中应该显示 inactive (dead) 状态,说明服务和套接字都已停止。


4. 重新启动时启用(可选)

如果需要再次使用 Docker,可以重新启用服务和套接字:

systemctl enable docker.service docker.socket
systemctl start docker.service

注意:

  • 如果你只是临时需要清理 /var/lib/docker,停止 docker.service 即可,docker.socket 的存在不会影响清理操作。
  • 在删除 /var/lib/docker 数据之前,请确保你已经备份了重要的镜像和容器数据。