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

运行MariaDB的Docker Compose脚本时遇批量读取初始化错误求助

MariaDB容器初始化脚本挂载报错排查

问题场景

使用Docker Compose部署MariaDB 10.8.3时,尝试将本地文件/opt/airflow/dags/scripts/mysql_init.sql挂载到容器内/docker-entrypoint-initdb.d/create_schema.sql,期望容器启动时自动执行初始化脚本,但出现以下错误:

/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/create_schema.sql
ERROR: Can't initialize batch readline - may be the input source is a directory or a block device

错误原因

这个报错的核心是容器内的/docker-entrypoint-initdb.d/create_schema.sql并非预期的文件,而是被识别为目录或块设备,导致初始化脚本执行逻辑无法读取正确的SQL文件。大概率是Docker Compose的挂载配置语法错误,误将文件挂载配置成了目录挂载。

解决方法

1. 修正Docker Compose挂载语法

确保挂载规则是本地文件路径:容器内文件路径,两边都要明确指定文件名,不能只写容器内的目录路径:

  • 错误配置(会导致容器内/docker-entrypoint-initdb.d/create_schema.sql变成目录):
    services:
      mariadb:
        image: mariadb:10.8.3
        volumes:
          # 错误:只指定了容器内目录,本地文件会被当成目录挂载
          - /opt/airflow/dags/scripts/mysql_init.sql:/docker-entrypoint-initdb.d/
    
  • 正确配置:
    services:
      mariadb:
        image: mariadb:10.8.3
        volumes:
          # 正确:明确指定本地文件和容器内目标文件的对应关系
          - /opt/airflow/dags/scripts/mysql_init.sql:/docker-entrypoint-initdb.d/create_schema.sql
    

2. 验证本地文件状态

  • 确认本地/opt/airflow/dags/scripts/mysql_init.sql是真实存在的文件,而非目录:
    ls -l /opt/airflow/dags/scripts/mysql_init.sql
    
  • 给文件设置合理权限,确保容器进程能读取:
    chmod 644 /opt/airflow/dags/scripts/mysql_init.sql
    

3. 清理旧容器与数据卷(若已初始化过容器)

如果之前已经启动过容器,MariaDB会标记数据目录为已初始化,不会再执行/docker-entrypoint-initdb.d下的脚本,需要清理后重新启动:

# 停止并删除容器
docker-compose down
# 同时删除关联的数据卷(会清除已有数据,谨慎操作)
docker-compose down -v
# 重新启动容器
docker-compose up -d

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 07:35:09