通过Docker Compose启动MySQL时无法自动运行SQL脚本问题求助
问题排查与解决步骤
- 清理已生成的历史容器与数据卷(最高频原因)
MySQL 官方镜像的初始化脚本仅在首次启动、无已有 MySQL 数据目录时执行,如果你之前启动过该服务已经生成了持久化数据,后续重启不会重新执行初始化脚本。执行以下命令清理历史数据:
注意:docker compose down -v-v参数会删除你声明的my-db卷,已有的 MySQL 数据会被清空,确认后再执行。执行完成后重新启动服务:docker compose up -d- 清理已生成的历史容器与数据卷(最高频原因)
- 检查文件挂载与权限
先确认挂载路径是否正确,执行以下命令查看容器内初始化目录的文件:
如果看不到docker compose exec db ls -l /docker-entrypoint-initdb.dsetup.sql,检查你的项目目录结构是否为:
如果能看到文件但执行失败,大概率是权限问题,给本地项目根目录 ├─ docker-compose.yaml └─ db/ └─ setup.sqlsetup.sql添加全局读权限:
之后再执行第一步的清理重启操作即可。chmod 644 ./db/setup.sql- 检查文件挂载与权限
- 检查SQL脚本语法
先手动执行脚本验证是否有语法错误:
如果执行报错,修正脚本错误后再重新清理启动。docker compose exec db mysql -uroot -ppassword < /docker-entrypoint-initdb.d/setup.sql- 检查SQL脚本语法
- 补充数据卷挂载配置(可选优化)
你当前的配置里顶层声明了my-db卷,但没有挂载到 MySQL 的实际数据存储路径,容器删除后 MySQL 的数据会丢失,可以修改services.db.volumes配置补充挂载:
volumes: - ./db:/docker-entrypoint-initdb.d - my-db:/var/lib/mysql- 补充数据卷挂载配置(可选优化)
内容的提问来源于stack exchange,提问作者MrStan12
相关产品推荐
相关产品推荐

