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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 07:25:40