You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

启动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服务和数据库正常启动:

  1. 你将MySQL容器的3306端口映射到了宿主机的3307端口,现有环境变量里的数据库连接URL端口为3306,需要修改为jdbc:mysql://localhost:3307/AlgorithmVisualization?serverTimezone=UTC才能正常连通数据库。
  2. 你当前仅执行了MySQL容器的启动命令,还需要执行docker build -t your-web-app .构建Spring Boot镜像,再启动对应的Web容器,两个容器都正常运行后服务才能正常访问。

内容的提问来源于stack exchange,提问作者Evan Gertis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:45:02