Docker Compose使用--init-file初始化MySQL提示文件不存在如何解决?
问题原因分析
- 你指定的
--init-file命令参数语法本身没有错误,报错的核心原因是:你仅将SCHEMA.sql放在了宿主机的docker-compose同级目录,没有将该文件挂载到MySQL容器内部,容器内的根目录下根本不存在/SCHEMA.sql文件,因此MySQL进程读取失败。
两种解决方案
方案1:保留--init-file配置,补充挂载规则
直接在你的db服务配置中新增volumes字段,将宿主机的脚本映射到容器内对应的路径即可:
db: image: mysql:5.7 ports: - "3306:3306" command: --init-file /SCHEMA.sql restart: always environment: MYSQL_DATABASE: shapeshop MYSQL_USER: admin MYSQL_PASSWORD: admin MYSQL_ROOT_PASSWORD: root networks: - backend # 新增下面的挂载配置 volumes: - ./SCHEMA.sql:/SCHEMA.sql
方案2(更推荐):使用MySQL官方镜像内置的初始化机制
MySQL官方镜像默认支持自动执行/docker-entrypoint-initdb.d/目录下的所有.sql/.sh初始化脚本,无需手动指定--init-file参数,配置更简单不易出错:
- 删除原来的
command: --init-file /SCHEMA.sql配置行 - 新增如下volumes配置:
volumes: - ./SCHEMA.sql:/docker-entrypoint-initdb.d/SCHEMA.sql
注意事项
如果之前已经启动过该MySQL服务,容器已经生成了持久化的数据库数据,初始化脚本只会在数据库数据目录为空的首次启动场景执行。修改配置后如果需要重新执行初始化脚本,可以先执行docker-compose down -v删除旧的关联数据卷,再重新启动服务即可。
内容的提问来源于stack exchange,提问作者Oliver Watkins
相关产品推荐
相关产品推荐

