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

Docker Compose中MySQL绑定卷自动重建问题求解

Docker Compose重启MySQL容器后存储目录自动重建的问题解决

问题描述

执行docker-compose down停止并移除MySQL容器及相关网络后,再次运行docker-compose up -d时,对应的存储目录会自动重建,导致之前的数据残留无法彻底清理。

我的docker-compose.yml配置

version: '3.9'
services:
  mysql_206:
    container_name: mysql_206
    hostname: mysql_206
    image: mysql:8
    restart: always
    command:
      - --authentication-policy=mysql_native_password
      - --character-set-server=utf8mb4
      - --collation-server=utf8mb4_unicode_ci
      - --innodb_force_recovery=0
    volumes:
      - ./mysql_206:/var/lib/mysql
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: senha
      MYSQL_DATABASE: base_de_dados
      TZ: America/Sao_Paulo

已尝试的操作

  • 执行docker stop mysql_206停止MySQL容器
  • 执行docker-compose down移除容器和网络,期望删除所有相关资源
  • 尝试用docker volume rm mysql-data手动删除卷,但报错:

Error response from daemon: get mysql-data: no such volume

解决方案

你的配置中使用的是本地绑定挂载(bind mount),而非Docker官方管理的volume。docker-compose down仅会删除容器、网络这些Docker管理的资源,不会触碰宿主机上的本地目录,因此重启容器时会自动复用该目录(若目录被手动删除,容器启动时会重新创建)。

彻底清理数据并重建容器

  1. 确保容器已完全停止并移除:
    docker-compose down
    
  2. 删除宿主机上的绑定目录(此操作会永久删除所有MySQL数据,请确认后执行):
    rm -rf ./mysql_206
    
  3. 重新启动容器:
    docker-compose up -d
    

仅清理目录内数据(保留目录结构)

若不想删除目录本身,仅清理其中的数据:

rm -rf ./mysql_206/*

改用Docker管理的volume(可选)

如果希望通过Docker命令管理存储卷,可将配置改为命名卷:

version: '3.9'
services:
  mysql_206:
    # 其余配置不变
    volumes:
      - mysql_206_volume:/var/lib/mysql

# 在services同级添加命名卷定义
volumes:
  mysql_206_volume:

此时执行docker-compose down -v即可同时删除容器、网络和该命名卷。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:03:17