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

Docker MySQL容器内SQL文件存在但导入提示文件不存在

问题成因

Shell的重定向符<是由当前执行命令的宿主机Shell(也就是你用的zsh)负责解析的,不会被传入Docker容器内部执行。
你执行的报错命令里,zsh会优先在宿主机本地文件系统查找/var/lib/mysql/mysql-pubsub-3.2.0.sql这个路径,而这个文件实际存放在Docker容器的独立文件系统里,宿主机上不存在对应路径,因此抛出文件不存在的错误。
之前执行docker exec -it docker-mysql ls 路径能成功返回结果,是因为ls命令本身运行在容器内部,读取的是容器的文件系统,和重定向的解析逻辑完全不同。

可行解决方法

你可以根据实际场景任选以下一种方案操作:

  • 方案1:让重定向逻辑在容器内部解析
    用bash -c把整条MySQL执行命令包裹起来,让包括重定向在内的整条逻辑都在容器的Shell环境中执行,注意执行时不需要分配交互终端,把参数里的-t去掉,同时MySQL的-p参数和密码之间不要加空格,避免参数解析错误:
    docker exec -i docker-mysql bash -c "mysql -u XXX -p'XXXX' < /var/lib/mysql/mysql-pubsub-3.2.0.sql"
    
  • 方案2:直接从宿主机挂载本地SQL文件导入
    如果SQL文件本身存放在宿主机上,不需要提前拷贝进容器,直接在宿主机侧做重定向,把本地SQL文件流通过管道传给容器内的MySQL进程即可:
    docker exec -i docker-mysql mysql -u XXX -p'XXXX' < /你本地宿主机上/存放SQL文件的/实际路径.sql
    
  • 方案3:进入容器内部手动执行导入
    先进入容器的交互式终端:
    docker exec -it docker-mysql bash
    
    连接进入MySQL命令行后,用source命令加载容器内的SQL文件完成导入:
    mysql -u XXX -p'XXXX'
    source /var/lib/mysql/mysql-pubsub-3.2.0.sql;
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:24:26