解决Docker磁盘空间不足导致MySQL启动失败

这个错误表明 Docker 容器的磁盘空间已满,具体是 MySQL 的临时表空间文件(ibtmp1)无法继续增长。以下是解决方案:
立即解决方案
1. 清理 Docker 磁盘空间
# 查看 Docker 磁盘使用情况
docker system df# 清理所有未使用的资源(容器、镜像、网络、构建缓存)
docker system prune -a# 如果有卷的话,也可以清理未使用的卷
docker volume prune

2. 删除特定的容器和关联资源
# 停止并删除 MySQL 容器
docker stop mysql
docker rm mysql# 删除可能过大的卷(谨慎操作,确保不要删除重要数据)
docker volume ls
docker volume rm [volume_name]
3. 调整 Docker 的存储位置或限制
# 查看 Docker 根目录大小
du -sh /var/lib/docker/# 如果有大文件,可以手动清理一些日志文件
# 通常在 /var/lib/docker/containers/[container_id]/
长期解决方案
1. 启动 MySQL 时限制临时表大小
docker run --name mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_INNODB_TEMP_DATA_FILE_PATH=ibtmp1:128M:autoextend:max:1G \
-d mysql:5.7 \
--innodb_temp_data_file_path=ibtmp1:128M:autoextend:max:1G
2. 使用数据卷持久化存储
# 创建专门的数据卷
docker volume create mysql_datadocker run --name mysql -p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=123456 \
-v mysql_data:/var/lib/mysql \
-d mysql:5.7
3. 监控磁盘空间
# 查看系统磁盘空间
df -h# 查看 Docker 容器磁盘使用
docker ps -s
紧急恢复步骤
-
首先清理 Docker 空间:
docker system prune -a docker volume prune -
重新启动 MySQL 容器:
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 -
如果问题依旧,检查宿主机磁盘空间:
df -h # 如果宿主机磁盘满,需要清理系统文件
这个错误通常是由于 Docker 的存储驱动积累了太多数据导致的,定期执行 docker system prune 可以预防此类问题。
