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

MySQL8 Docker Compose密码失效及dump初始化文件执行报错排查

问题根源排查
  • Dockerfile未生效:你编写了自定义Dockerfile处理初始化SQL,但docker-compose.yml中直接指定image: mysql:8.0.21,没有使用本地构建的镜像,Dockerfile中配置的环境变量、复制的SQL文件全部没有生效,是密码配置被忽略的核心原因。
  • --init-file参数用法错误:MySQL的--init-file启动参数要求指定单个SQL文件路径,你传入的是/docker-entrypoint-initdb.d/目录,直接触发I/O error 1的启动报错,是数据库启动异常、初始化失败的直接原因。
  • 初始化逻辑冲突+卷残留:官方MySQL镜像默认会在首次启动时自动执行/docker-entrypoint-initdb.d/下的所有SQL文件,不需要额外加--init-file参数。加上该参数后会和镜像默认初始化逻辑冲突,第一次启动时会中断初始化,导致/var/lib/mysql目录下生成不完整的文件结构,所以会出现需要启动两次、提示数据目录不可用的问题。
修复步骤

1. 修改docker-compose.yml配置

调整配置让compose使用自定义镜像,删除错误的启动参数:

version: "3.8"
services:
  mysqldb:
    build: ./MySQL # 替换原有image字段,指定Dockerfile所在目录
    container_name: mysqlDB
    # 仅保留认证插件配置,删除错误的init-file参数
    command: --default-authentication-plugin=mysql_native_password
    ports:
      - "3307:3306"
    restart: always
    environment:
      MYSQL_DATABASE: Olimpo
      MYSQL_USER: admin
      MYSQL_PASSWORD: senha
      MYSQL_ROOT_PASSWORD: senha
    volumes:
      - mysql_data:/var/lib/mysql
      # 如果你不想把SQL内置到镜像里,可以直接挂载本地SQL目录,此时Dockerfile中ADD、sed、cp相关步骤可以全部删除
      # - ./MySQL:/docker-entrypoint-initdb.d
    networks:
      - backend
volumes:
  mysql_data:
    driver: local
networks:
  backend:

2. 清理旧残留资源

执行以下命令彻底清理旧容器、镜像、卷:

docker-compose down -v
docker system prune -a

3. 重新启动服务

启动时添加--build参数强制构建自定义镜像,确保修改生效:

docker-compose up --build

4. 验证配置有效性

服务启动完成后,执行以下命令测试登录:

docker exec -it mysqlDB mysql -u admin -psenha

登录成功后执行SQL验证初始化结果:

show databases;
use Olimpo;
show tables;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:36:02