Mac ARM64环境Docker启动MySQL5.7初始化脚本失败报错
解决Mac ARM64下Docker Compose部署MySQL 5.7初始化失败问题
问题原因
MySQL 5.7官方Docker镜像未适配ARM64架构,Mac ARM64设备运行时会通过QEMU模拟x86环境,这种模拟会触发终端交互相关的初始化错误,导致Can't initialize batch_readline报错。
解决方案
方案1:使用ARM64兼容的MySQL 5.7镜像
替换官方镜像为官方维护的多架构版本mysql/mysql-server:5.7,该镜像原生支持ARM64。修改后的Docker Compose配置如下:
mysql: image: mysql/mysql-server:5.7 container_name: mysql environment: MYSQL_ROOT_PASSWORD: 'root' MYSQL_INITDB_SKIP_TZINFO: '1' # 规避时区初始化可能引发的兼容问题 ports: - '3306:3306' volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql - mysql:/var/lib/mysql:rw
方案2:禁用终端交互模式
在Docker Compose配置中添加终端相关参数,或指定跳过交互的启动命令:
方式A:开启终端支持
mysql: image: mysql:5.7 container_name: mysql environment: MYSQL_ROOT_PASSWORD: 'root' ports: - '3306:3306' volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql - mysql:/var/lib/mysql:rw stdin_open: true tty: true
方式B:指定无交互启动命令
mysql: image: mysql:5.7 container_name: mysql environment: MYSQL_ROOT_PASSWORD: 'root' ports: - '3306:3306' volumes: - ./init.sql:/docker-entrypoint-initdb.d/init.sql - mysql:/var/lib/mysql:rw command: ["mysqld", "--skip-name-resolve"]
方案3:修正初始化脚本权限
确保本地init.sql文件权限正常,避免容器内无法读取:
chmod 644 ./init.sql
验证步骤
- 清理原有容器与数据卷:
docker-compose down -v
- 应用修改后的配置启动服务:
docker-compose up -d
- 查看容器日志确认启动状态:
docker logs mysql
内容的提问来源于stack exchange,提问作者Vadim Filin
相关产品推荐
相关产品推荐

