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

Docker Compose中MySQL不读取自定义conf、无法加载大SQL及开放外部连接问题

问题修复方案

核心错误原因

  • 重复command覆盖:docker-compose中同一服务下多次写command字段,只有最后一条会生效,前面的权限修改命令完全未执行;且mysql官方镜像默认无sudo命令,就算执行也会报错
  • my.cnf未生效:由于你挂载的z_my.cnf权限不符合mysql要求(mysql要求配置文件不能被其他用户可写),导致配置未加载,你设置的max_allowed_packet=1G未生效,触发大SQL的查询大小限制报错
  • 初始化逻辑错误:使用--init-file导入大SQL的限制远高于官方镜像自带的/docker-entrypoint-initdb.d/自动导入逻辑;同时自定义command覆盖了官方入口脚本的初始化流程,MYSQL_ROOT_HOST: '%'的配置完全未生效,导致root用户默认只允许本地登录,出现外部主机连接被拒绝的报错
  • 残留数据影响:第一次启动失败后生成的dbdata目录残留了未完成初始化的mysql数据,后续即使修改配置重启,也不会重新执行初始化逻辑,配置不会生效

修复步骤

  1. 先清理旧的残留数据,避免影响重新初始化:
docker-compose down -v
  1. 修正宿主机上my.cnf的权限,确保mysql可以正常加载:
chmod 644 ./db/my.cnf
  1. 替换docker-compose.yml为如下内容:
version: '3.2'

services:
  db:
    image: mysql:8.0
    container_name: acDB
    restart: always
    ports:
      - '6603:3306'
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: ac_db
      MYSQL_USER: ac
      MYSQL_PASSWORD: ac
      MYSQL_ROOT_HOST: '%'
    volumes:
      - ./db/my.cnf:/etc/mysql/conf.d/z_my.cnf
      - ./dbdata:/var/lib/mysql
      # 挂载到官方镜像的自动初始化目录,首次启动会自动执行该目录下的sql文件
      - ./db/big.sql:/docker-entrypoint-initdb.d/init.sql

  phpmyadmin:
    depends_on:
      - db
    image: phpmyadmin/phpmyadmin
    container_name: phpmyadmin
    restart: always
    ports:
      - '8080:80'
    environment:
      PMA_HOST: db
      PMA_USER: root
      PMA_PASSWORD: root
volumes:
  dbdata:
  1. 重新启动服务:
docker-compose up -d

验证方式

大SQL导入耗时较长,可以执行docker logs -f acDB查看导入进度,导入完成后:

  • 宿主机执行mysql -h 127.0.0.1 -P 6603 -u root -proot可正常登录
  • 访问http://宿主机IP:8080可正常打开phpmyadmin并登录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 19:06:04