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

Win10下Docker Compose部署MySQL 5.5遇aio write错误求助

解决Windows 10 Home + Docker Toolbox下MySQL 5.5容器InnoDB AIO写入错误

我之前在Windows 10 Home用Docker Toolbox部署MySQL 5.5容器时,也碰到过一模一样的InnoDB AIO写入错误(错误码22),直接在environment里加innodb_use_native_aio=0确实没用——因为MySQL的配置优先级问题,容器默认的配置文件会覆盖环境变量里的设置。下面是我亲测有效的解决步骤:

1. 创建自定义MySQL配置文件

在你的docker-compose.yml同级目录下,新建mysql/conf文件夹,然后在里面创建my.cnf文件,写入以下内容:

[mysqld]
# 禁用原生AIO,适配Docker Toolbox的VirtualBox共享目录
innodb_use_native_aio=0

2. 修改docker-compose.yml挂载配置文件

更新你的docker-compose.yml,在volumes部分添加配置文件的挂载规则,让容器使用我们自定义的配置:

database:
  image: mysql:5.5
  ports:
    - "3306:3306"
  environment:
    - MYSQL_ROOT_PASSWORD=pass
    - MYSQL_DATABASE=db
    - MYSQL_USER=user
    - MYSQL_PASSWORD=pass
  volumes:
    - ./data:/var/lib/mysql
    # 挂载自定义配置文件,覆盖容器默认配置
    - ./mysql/conf/my.cnf:/etc/mysql/my.cnf

3. 清理损坏的旧数据(关键步骤)

之前容器启动失败时,./data目录里可能已经生成了损坏的InnoDB数据文件,这些文件会导致后续启动依然失败。所以先删除这个目录:

# Windows命令行执行
rmdir /s ./data
# 若用Git Bash等类Unix终端,执行
rm -rf ./data

4. 重新启动容器

现在运行启动命令,容器应该能正常初始化了:

docker-compose up -d database

补充说明

  • 为什么环境变量设置无效?因为MySQL的配置加载优先级是:配置文件 > 命令行参数 > 环境变量,直接在environment里设置的参数会被容器默认的my.cnf覆盖,所以必须用自定义配置文件挂载的方式。
  • Docker Toolbox依赖VirtualBox虚拟机,虚拟机的共享目录不支持InnoDB的原生AIO操作,所以必须禁用这个特性才能正常运行MySQL 5.5。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:03:40