min*_*nel 63 diskspace device-mapper docker
我已经设置了docker,我使用了完全不同的块设备来存储docker的系统数据:
[root@blink1 /]# cat /etc/sysconfig/docker
# /etc/sysconfig/docker
other_args="-H tcp://0.0.0.0:9367 -H unix:///var/run/docker.sock -g /disk1/docker"
Run Code Online (Sandbox Code Playgroud)
请注意,/disk/1使用完全不同的硬盘驱动器/dev/xvdi
Filesystem Size Used Avail Use% Mounted on
/dev/xvda1 7.8G 5.1G 2.6G 67% /
devtmpfs 1.9G 108K 1.9G 1% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
/dev/xvdi 20G 5.3G 15G 27% /disk1
/dev/dm-1 9.8G 1.7G 7.6G 18% /disk1/docker/devicemapper/mnt/bb6c540bae25aaf01aedf56ff61ffed8c6ae41aa9bd06122d440c6053e3486bf
/dev/dm-2 9.8G 1.7G 7.7G 18% /disk1/docker/devicemapper/mnt/c85f756c59a5e1d260c3cdb473f3f4d9e55ac568967abe190eeaf9c4087afeac
Run Code Online (Sandbox Code Playgroud)
问题是当我继续下载docker镜像并运行docker容器时,似乎另一个硬盘驱动器/dev/xvda1也用完了.
我可以通过删除一些docker镜像来验证此问题.删除一些docker图像后,/dev/xvda1现在有一些额外的空间.
我错过了什么吗?
我的码头版:
[root@blink1 /]# docker info
Containers: 2
Images: 42
Storage Driver: devicemapper
Pool Name: docker-202:1-275421-pool
Pool Blocksize: 64 Kb
Data file: /disk1/docker/devicemapper/devicemapper/data
Metadata file: /disk1/docker/devicemapper/devicemapper/metadata
Data Space Used: 3054.4 Mb
Data Space Total: 102400.0 Mb
Metadata Space Used: 4.7 Mb
Metadata Space Total: 2048.0 Mb
Execution Driver: native-0.2
Kernel Version: 3.14.20-20.44.amzn1.x86_64
Operating System: Amazon Linux AMI 2014.09
Run Code Online (Sandbox Code Playgroud)
Nat*_*rot 53
这是devicemapper的核心问题,它会影响RedHat系列的操作系统(RedHat,Fedora,CentOS和Amazon Linux).已删除的容器不会释放映射的磁盘空间.这意味着在受影响的操作系统上,当您启动并重新启动容器时,您将慢慢耗尽空间.
Docker项目意识到这一点,并且内核应该在上游修复(https://github.com/docker/docker/issues/3182).
各种解决方法是给Docker自己的卷写入("当Docker吃掉磁盘空间时").这实际上并没有阻止它占用空间,只是在它之后取下系统的其他部分.
我的解决方案是卸载docker,然后删除其所有文件,然后重新安装:
sudo yum remove docker
sudo rm -rf /var/lib/docker
sudo yum install docker
Run Code Online (Sandbox Code Playgroud)
这让我的空间恢复了,但与启动替换实例没什么不同.我还没有找到更好的解决方案.
rjd*_*olb 44
删除我的整个/ var/lib/docker对我来说不合适.这些是更安全的方式:
解决方案1:
从发出以下命令清理空间,对我来说,它是不是删除在/ var/lib中/搬运工或为Windows更安全了很多检查您的磁盘映像的位置在这里.
之前:
docker info
Run Code Online (Sandbox Code Playgroud)
在较新版本的Docker中命令,例如17.x +
Metadata file:
Data Space Used: 53.38 GB
Data Space Total: 53.39 GB
Data Space Available: 8.389 MB
Metadata Space Used: 6.234 MB
Metadata Space Total: 54.53 MB
Metadata Space Available: 48.29 MB
Run Code Online (Sandbox Code Playgroud)
(它将显示'Total reclaimed space')
例如,总回收空间:1.243GB
解决方案2:
除此之外,请确保docker容器中的程序不会将许多/大文件写入文件系统.
检查正在运行的docker进程的空间使用大小
docker system prune -a
Run Code Online (Sandbox Code Playgroud)
或所有容器,甚至退出
Total reclaimed space: 1.243GB
Run Code Online (Sandbox Code Playgroud)
然后,您可以删除有问题的容器
docker info
Run Code Online (Sandbox Code Playgroud)
找出可能使用空间演出的罪魁祸首
docker ps -s #may take minutes to return
Run Code Online (Sandbox Code Playgroud)
在我的情况下,程序正在编写临时文件的演出.
(Nathaniel Waisbrot在接受的答案中提到了这个问题,我从这个问题得到了一些信息)
要么
旧版Docker中的命令,例如1.13.x(以root身份运行而不是sudo):
docker ps -as #may take minutes to return
Run Code Online (Sandbox Code Playgroud)
之后:
docker rm <CONTAINER ID>
Run Code Online (Sandbox Code Playgroud)
有同样的问题。在我的场景中,我的 vbox 存储空间不足。经过调查发现我的 docker 本地卷消耗了 30GB。Ubuntu 16.04 主机。
找出你的。
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 0 1.361GB 1.361GB (100%)
Containers 0 0 0B 0B
Local Volumes 7 0 9.413GB 9.413GB (100%)
Build Cache 0B 0B
docker system prune --volumes
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all volumes not used by at least one container
- all dangling images
- all build cache
Are you sure you want to continue? [y/N]
Run Code Online (Sandbox Code Playgroud)
这释放了未使用的本地卷的磁盘空间。在我的方案中释放了 20 GB 的存储空间。如果要保留它们,请在执行此操作之前确保要保留的容器正在运行,因为这会删除所有停止的容器。
小智 5
移动/var/lib/docker目录。
假设/data目录有足够的空间(如果没有),请替换该目录,
sudo systemctl stop docker
sudo mv /var/lib/docker /data
sudo ln -s /data/docker /var/lib/docker
sudo systemctl start docker
Run Code Online (Sandbox Code Playgroud)
这样,您不必重新配置docker。
我有类似的问题,我认为当磁盘上没有足够的空间用于所有docker镜像时会发生这种情况.我为docker图像预留了6GB,但在我的情况下,这已经不够了.无论如何,我已经删除了每个图像和容器,但仍然看起来已经满了./ var/lib/docker/devicemapper和/ var/lib/docker/tmp正在使用大部分空间.
这个命令对我不起作用:
# docker ps -qa | xargs docker inspect --format='{{ .State.Pid }}' | xargs -IZ fstrim /proc/Z/root/
Run Code Online (Sandbox Code Playgroud)
首先,我停止了docker服务:
sudo service docker stop
Run Code Online (Sandbox Code Playgroud)
然后我删除了/ var/lib/docker:
然后我在https://github.com/docker/docker/issues/18867#issuecomment-232301073做了有人建议的
删除docker metadata rm -rf/var/lib/docker的现有实例
sudo rm -rf/var/lib/docker
将以下选项传递给docker守护程序:-s devicemapper --storage-opt dm.fs = xfs --storage-opt dm.mountopt = discard
启动docker守护程序.
最后两步,我运行:
sudo dockerd -s devicemapper --storage-opt dm.fs=xfs --storage-opt dm.mountopt=discard
Run Code Online (Sandbox Code Playgroud)
默认情况下,Docker prune 不会删除卷,
你可以尝试类似的东西
docker volume prune -f
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
54329 次 |
| 最近记录: |