启动mysql 5.7 Docker容器报/var/lib/docker/overlay2只读错误如何解决
问题背景
本次操作目标为部署Spring Boot Web服务+MySQL Docker容器实现常规Web服务运行,现有配置与报错如下:
现有配置
Dockerfile(Spring Boot镜像构建)
FROM openjdk:8-jdk-alpine ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["java","-jar","/app.jar"]
Spring Boot启动类代码
package com.company.app; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }
已配置环境变量
set AV_DATABASE_URL=jdbc:mysql://localhost:3306/AlgorithmVisualization?serverTimezone=UTC set DATABASE_USER=root set DATABASE_PASSWORD=test123 set AV_SCHEMA=AlgorithmVisualization
MySQL容器启动命令
docker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD=test123 -e MYSQL_DATABASE=AlgorithmVisualization mysql:5.7
报错信息
Error response from daemon: mkdir /var/lib/docker/overlay2/1b82892bacfb2a69e7cd5c71707d1b19519783f0df1edfaa29f0ab50d764e705-init: read-only file system.
错误原因
该报错属于Docker宿主机层面的存储异常,和容器内部配置、业务代码无关:Docker守护进程在创建容器的overlay2存储层时,发现自身的存储目录/var/lib/docker处于只读文件系统下,无法创建新目录导致启动失败。
排查解决步骤
按优先级从高到低执行以下操作:
- 检查宿主机分区挂载状态
执行命令mount | grep /var/lib/docker,如果输出结果中包含ro标识,说明对应分区被挂载为只读。无硬件异常的情况下可以执行mount -o remount,rw /var/lib/docker重新挂载为读写模式;如果是磁盘损坏触发的系统自动只读挂载,先备份数据修复磁盘故障。 - 检查Docker存储目录权限
执行命令ls -ld /var/lib/docker,确认目录属主为root、权限为711,异常的话执行chown root:root /var/lib/docker && chmod 711 /var/lib/docker修复。 - 重启Docker服务
Linux环境执行systemctl restart docker,Windows/macOS环境打开Docker Desktop点击重启按钮,重启完成后重新执行容器启动命令测试。 - 重置Docker存储(需提前备份数据)
如果上述操作都无效,先导出所有需要保留的镜像、容器数据,执行以下命令重置Docker存储:
systemctl stop docker rm -rf /var/lib/docker systemctl start docker
重置完成后重新拉取mysql:5.7镜像,启动容器即可。
后续业务配置修正
Docker存储问题解决后,还需要修正两个配置问题才能实现Web服务和数据库正常启动:
- 你将MySQL容器的3306端口映射到了宿主机的3307端口,现有环境变量里的数据库连接URL端口为3306,需要修改为
jdbc:mysql://localhost:3307/AlgorithmVisualization?serverTimezone=UTC才能正常连通数据库。 - 你当前仅执行了MySQL容器的启动命令,还需要执行
docker build -t your-web-app .构建Spring Boot镜像,再启动对应的Web容器,两个容器都正常运行后服务才能正常访问。
内容的提问来源于stack exchange,提问作者Evan Gertis
相关产品推荐
相关产品推荐

