docker容器空间不足

技术分享 Finley Fu 2018-11-25 1评论 527
一个docker容器空间不足引发的惨案

一、原因分析

        话说我们很多时候为了方便部署都会使用docker容器来解决多次部署环境安装问题,最近在工作中碰到了docker的一个问题。

        事故缘由:客户需要把4个G的文件导入到新部署的系统内部,而当我把文件打包到docker中,再执行程序调用sql的时候,问题出现了!

        程序控制台报错  Mysql2::Error: Got error 28 from storage engine: SHOW FULL FIELDS FROM...

        很明显是mysql临时空间不足,然后从页面访问整个系统,果不其然,同样的错误,既然如此,只能先查看问题原因了,首先想到的就是docker容器究竟分配了多大空间(整个容器最开始不是我部署的)。

        进入docker中执行命令  df -h,可以看到只分配了10G大小,而部署应用和其他数据都已经占去了6G,难怪会报错。

    既然问题原因已经查出,那么就好办了,调整空间大小不就行了呗

二、Docker修改容器空间

  • 进入目录(根据自己安装目录调整)

cd /dev/mapper/

  • 查看容器是否正在运行

docker ps -a

  • 查看容器卷

dmsetup table

        其中绿色部分就是现在空间大小,单位为B,需要调整,红色部分需要记下,后续使用

  • 使用ls命令查看文件夹是否存在(未在运行的docker容器不存在)

  • 修改空间大小

echo 0 104857600 thin 253:7 11 | dmsetup load docker-253:0-916479-5650a67fc3264802217fe7aa6412d360c8cc11ff601764a0853d978d2962b063
        我这里使用的104857600就是修改后的空间大小50G,计算公式:50*1024*1024*1024/512

        然后执行命令

dmsetup resume docker-253:0-916479-5650a67fc3264802217fe7aa6412d360c8cc11ff601764a0853d978d2962b063 resize2fs /dev/mapper/docker-253:0-916479-5650a67fc3264802217fe7aa6412d360c8cc11ff601764a0853d978d2962b063

        到这里就修改完成了

        进入docker查看下空间

        OK,没问题,再把文件打包上去也不会报错了。