为何Docker填充/ var / lib / docker / overlay2?

时间:2020-05-04 12:18:56

标签: docker

即使我已成功(?)删除了所有Docker映像和容器,但/ var / lib / docker / overlay2文件夹仍然很大(152 GB)。为什么?如何减少使用的磁盘大小?

我试图重命名文件夹(为可能删除文件夹做准备),但是这导致随后的拉取请求失败。

在我看来,Docker需要这么大的磁盘空间只是为了以后能够再次提取映像,这真是令人难以置信。请告诉我什么地方错了,或者为什么必须这样。

运行的命令列表应显示我尝试过的内容和当前状态:

$ docker image prune --force
Total reclaimed space: 0B

$ docker system prune --force
Total reclaimed space: 0B

$ docker image prune -a --force
Total reclaimed space: 0B

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

$ docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

$ du -h --max-depth=1 /var/lib/docker/overlay2 | sort -rh | head -25
152G    /var/lib/docker/overlay2
1.7G    /var/lib/docker/overlay2/ys1nmeu2aewhduj0dfykrnw8m
1.7G    /var/lib/docker/overlay2/ydqchhcaqokdokxzbh6htqa49
1.7G    /var/lib/docker/overlay2/xmffou5nk3zkrldlfllopxcab
1.7G    /var/lib/docker/overlay2/tjz58rjkote2c79veonb3s6qa
1.7G    /var/lib/docker/overlay2/rlnr04hlcudgoh6ujobtsu2ck
1.7G    /var/lib/docker/overlay2/r4ubwsmrorpr08k8o5rko9n98
1.7G    /var/lib/docker/overlay2/q8x21c9enjhpitt365smkmn4e
1.7G    /var/lib/docker/overlay2/ntr973uef37oweqlxr4kmaxps
1.7G    /var/lib/docker/overlay2/mcyasqzo2gry5dvjxoao1opws
1.7G    /var/lib/docker/overlay2/m2k4u58mob6e2db86qqu1e1f8
1.7G    /var/lib/docker/overlay2/lizesless03kch8j7kpk89rcf
1.7G    /var/lib/docker/overlay2/kmu7mjvsopr8o63onbsijb98j
1.7G    /var/lib/docker/overlay2/khgjwqry5drdy0jbwf47gr2lb
1.7G    /var/lib/docker/overlay2/gt70ur50vw3whq265vmpep7ay
1.7G    /var/lib/docker/overlay2/c3tm1fcuekmdreowrfcso7nd4
1.7G    /var/lib/docker/overlay2/7j93t64mt63arj6sewyyejwyo
1.7G    /var/lib/docker/overlay2/3ftxvvg2xg02xuwcb3ut3dq89
1.7G    /var/lib/docker/overlay2/0m3o3lw6b1ggs8m6z4uv6ueqf
1.4G    /var/lib/docker/overlay2/r82rfxme096cq5pg1xz1z5arg
1.4G    /var/lib/docker/overlay2/qric73hv1z3nx4k0zop3fvcm6
1.4G    /var/lib/docker/overlay2/oyb0a5ab5h642y30s6hawj4r9
1.4G    /var/lib/docker/overlay2/oqf9ltfoy36evnkuo8ga2uepl
1.4G    /var/lib/docker/overlay2/ntuwvljxxzqs2oxhgg3enyo7x
1.4G    /var/lib/docker/overlay2/l0oi2lxdrtg42hk2rznknqk0r

$ ls -l /var/lib/docker/overlay2
total 136
drwx------  4 root root     72 Nov 20 13:03 00ep8i7v5bdmhqsxdoikslr19
drwx------  4 root root     72 Feb 28 09:47 026x5e2xns6ui2acym19qfvl7
drwx------  4 root root     72 Apr  2 19:20 032y8d31damevtfymq6yzkyi4
drwx------  4 root root     72 Apr 23 13:42 03wwbyd4uge9u0auk94wwdlig
drwx------  4 root root     72 Jan 15 12:46 04cy91a19owwqu9hyw6vruhzo
drwx------  4 root root     72 Apr  2 14:44 051625a0f856b63ed67a3bc9c19f09fb1c90303b9536791dc88717cb7379ceeb
drwx------  4 root root     72 Dec  3 19:56 059fk19uw70p6fqzei6wnj8s2
drwx------  4 root root     72 Apr 21 15:03 059mddrhqegqhxv1ockejw9gs
drwx------  4 root root     72 Nov 28 11:26 069dwkz92m8fao6whxnj4x9vp
drwx------  4 root root     72 Feb 28 09:47 06h7qo5f70oyzaqgn1elbx5u8
drwx------  4 root root     72 Dec 18 13:27 0756fd640036fa92499cfdcf4bcc3081d9ec16c25eebe5964d5e12d22beb9991
drwx------  4 root root     72 Apr 20 11:32 09rk4gm6x2mcquc5cz0yvbawq
drwx------  4 root root     72 Apr  2 19:55 09scfio3qvtewzgc5bdwgw4f6
drwx------  4 root root     72 May  4 14:00 0ac2a09aa4a038981d37730e56dece4a3d28e80f261b68587c072b4012dc044a
drwx------  4 root root     72 Feb 25 14:19 0c399f5c349ec61ac175525c52533b069a52028354c1055894466e9b5430fbc3
drwx------  4 root root     72 May  4 14:00 0cac39b1382986a2d9a6690985792c04d03192337ea37ee06cb74f2f457b7bb7
drwx------  4 root root     72 Mar  5 08:41 0czco1xx3148slgwf8imdrk33
drwx------  4 root root     72 Apr 21 08:30 0gb2iqev9e7kr587l09u19eff
drwx------  4 root root     72 Feb 20 18:03 0gknqh4pyg46uzi6asskbf8xk
drwx------  4 root root     72 Jan  8 11:43 0gugiou3wqu53os4dageh77ty
drwx------  4 root root     72 Jan  7 11:31 0i8fd5jet6ieajyl2uo1xj2ai
.
.
.

$ docker version
Client: Docker Engine - Community
 Version:           19.03.8
 API version:       1.40
 Go version:        go1.12.17
 Git commit:        afacb8b
 Built:             Wed Mar 11 01:27:04 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.8
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.17
  Git commit:       afacb8b
  Built:            Wed Mar 11 01:25:42 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.13
  GitCommit:        7ad184331fa3e55e52b890ea95e65ba581ae3429
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

3 个答案:

答案 0 :(得分:2)

为可能删除文件夹做准备

如果您打算从Docker目录中删除所有数据,则可以安全地进行以下操作:

  1. 停止Docker守护程序
  2. 完全删除/ var / lib / docker目录
  3. 重新启动Docker Daemon

然后Docker将重新创建任何需要的数据目录。

您还可以添加:

"log-driver": "json-file",
"log-opts": {"max-size": "20m", "max-file": "3"},

到/etc/docker/daemon.json以限制将来的日志大小和增长,或将日志驱动程序设置为“ journald”以完全消除日志文件。

答案 1 :(得分:1)

您可能已在此过程中的某个位置切换了存储驱动程序,因此docker可能只是清理了这些驱动程序,但仍保留了overlay2(我仍然不明白为什么提取映像会失败)。

让我们尝试一下,运行docker info并检查您的存储驱动程序是什么:

$ docker info

Containers: 0
Images: 0
Storage Driver: overlay2
 Backing Filesystem: xfs
 Supports d_type: true
 Native Overlay Diff: true
<output truncated>

如果不是overlay2(如上所示)try switching to it,然后再次修剪docker映像并检查是否清理了该文件夹。

另一种可能的解决方案是mentioned in this thread,人们评论说清除日志可以解决此问题,因此请尝试以下操作:

  1. 删除所有日志文件:
    find /var/lib/docker/containers/ -type f -name "*.log" -delete
    
  2. 重新启动docker守护程序(或整个机器):
    sudo systemctl restart docker
    
    要么
    docker-compose down && docker-compose up -d
    
    要么
    shutdown -r now
    

答案 2 :(得分:1)

感谢您的输入和建议!

我相信我仍在使用overlay2作为存储驱动程序:

$ docker info
Client:
 Debug Mode: false

Server:
 Containers: 0
  Running: 0
  Paused: 0
  Stopped: 0
 Images: 0
 Server Version: 19.03.8
 Storage Driver: overlay2
<output truncated>

我还清除了日志,并重新启动了守护程序,实际上还重新启动了整个计算机。但是问题仍然存在。

最后,我通过停止守护进程,删除整个docker文件夹并重新启动守护进程来解决它,如上所述。

df -h
sudo systemctl stop docker
sudo mv /var/lib/docker /var/lib/docker_old
sudo systemctl start docker
sudo rm -rf /var/lib/docker_old
df -h

但是,我担心这将不是永久性的解决方案,问题会再次出现,但是希望将持续一年。 :)