Mac环境下Docker Compose部署MySQL容器启动失败求助
问题:Docker Compose部署MySQL容器失败(MacOS Ventura环境)
环境信息
- MacBook配置:2.6 GHz 6核Intel Core i7
- 系统版本:Ventura 13.0.1
- 使用Docker Compose部署MySQL 8.0容器,搭配Flask和Nginx服务
docker-compose.yml配置
version: '3.1' services: db: image: mysql:8.0 environment: - MYSQL_DATABASE=${MYSQL_DATABASE} - MYSQL_USER=${MYSQL_USER} - MYSQL_PASSWORD=${MYSQL_PASSWORD} - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} expose: - 3306 healthcheck: test: mysqladmin ping -h 127.0.0.1 -u ${MYSQL_USER} --password=${MYSQL_PASSWORD} interval: 5s timeout: 5s retries: 55 restart: unless-stopped flask: build: context: ./ dockerfile: Dockerfile volumes: - ./:/var/www/ working_dir: /var/www/ command: python3 app.py depends_on: - "db" restart: unless-stopped nginx: image: nginx:1.13.7 container_name: nginx volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./static:/var/www/html ports: - 80:80 depends_on: - "flask" restart: unless-stopped
容器崩溃日志
compose_2023-db-1 | 2023-02-09T22:33:31.523197Z 0 [ERROR] [MY-013236] [Server] The designated data directory /var/lib/mysql/ is unusable. You can remove all files that the server added to it. compose_2023-db-1 | 2023-02-09T22:33:31.523257Z 0 [ERROR] [MY-010119] [Server] Aborting compose_2023-db-1 | 2023-02-09T22:33:31.523345Z 0 [System] [MY-010910] [Server] /usr/sbin/mysqld: Shutdown complete (mysqld 8.0.32) MySQL Community Server - GPL.
已尝试的排查操作
- 未配置持久化卷时出现错误,尝试主机文件系统挂载和Docker卷后问题依旧
- 重启Docker、电脑,更新Docker到最新版本
- 删除所有镜像、容器后重新部署
- 更换镜像标签:mysql:latest、mysql:7.6、mysql:8.0等,均无效
- 单独使用以下命令启动mysql:5.7容器可正常运行:
docker run -d \ -e MYSQL_ROOT_PASSWORD=root \ -e MYSQL_DATABASE=db \ -e MYSQL_USER=myuser \ -e MYSQL_PASSWORD=mypass \ -v $(pwd)/db:/var/lib/mysql \ -p 3306:3306 \ mysql:5.7
解决思路建议
1. 验证环境变量有效性
确保项目根目录存在.env文件且变量配置正确,或者直接在docker-compose.yml中硬编码环境变量(如MYSQL_DATABASE=mydb)进行测试,排除环境变量未正确加载导致的初始化失败。
2. 调整健康检查配置
当前健康检查使用普通用户执行ping操作,但MySQL初始化过程中普通用户可能尚未创建完成,建议改用root用户进行健康检查:
healthcheck: test: mysqladmin ping -h 127.0.0.1 -u root --password=${MYSQL_ROOT_PASSWORD} interval: 10s timeout: 5s retries: 20
同时延长检查间隔,避免频繁检查干扰MySQL初始化流程。
3. 彻底清理残留数据
执行以下命令清理所有相关数据后重新部署:
# 停止容器并删除卷 docker-compose down -v # 删除主机上的MySQL数据目录(如果存在) rm -rf ./db # 清理Docker未使用的卷 docker volume prune -f
4. 适配MySQL 8.0认证机制
MySQL 8.0默认使用caching_sha2_password认证插件,部分场景下会导致初始化或连接问题,可在db服务中添加命令参数切换为旧版认证插件:
db: image: mysql:8.0 # 其他配置不变 command: --default-authentication-plugin=mysql_native_password
5. 检查Docker文件共享权限
在Docker Desktop的Settings > Resources > File Sharing中,确认当前项目目录已被添加到共享列表,避免挂载主机目录时出现权限或访问限制。
内容的提问来源于stack exchange,提问作者paupaulaz
相关产品推荐
相关产品推荐

