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

Docker Compose导入MySQL失败:TTY设备错误及命令用法问题求助

解决Docker Compose导入SQL到MySQL容器的TTY错误问题

我来帮你搞定这个问题!你遇到的错误核心是docker-compose exec默认会分配伪终端(TTY),而当你用<重定向输入时,TTY和标准输入的交互产生了冲突。另外你之前可能把参数位置搞错了——docker-compose exec的选项要放在服务名/容器名之前,不是命令后面,这才导致了用法提示报错。

正确的命令写法(直接解决问题)

把-T参数(禁用TTY分配)放在exec和容器名之间,同时注意密码的写法(-p后面直接跟密码,不要留空格,避免触发交互输入):

docker-compose exec -T MYSQL_CONTAINERNAME mysql -uroot -p你的数据库密码 --database=MY_DB < /code/export_new.sql

如果不想在命令行明文写密码,用环境变量更安全:

MYSQL_PWD=你的数据库密码 docker-compose exec -T MYSQL_CONTAINERNAME mysql -uroot --database=MY_DB < /code/export_new.sql

替代方案1:用docker exec代替docker-compose exec

有时候docker exec的参数逻辑更直观,只需要加-i保持标准输入打开即可:

docker exec -i MYSQL_CONTAINERNAME mysql -uroot -p你的数据库密码 --database=MY_DB < /code/export_new.sql

替代方案2:先拷贝SQL文件到容器再导入

如果你的SQL文件在宿主机上,也可以先把文件拷贝到容器内部,再执行导入:

  1. 拷贝文件到容器:
docker-compose cp /宿主机上的文件路径/export_new.sql MYSQL_CONTAINERNAME:/tmp/export_new.sql
  1. 在容器内执行导入:
docker-compose exec MYSQL_CONTAINERNAME mysql -uroot -p你的数据库密码 MY_DB < /tmp/export_new.sql

或者用source命令更简洁:

docker-compose exec MYSQL_CONTAINERNAME mysql -uroot -p你的数据库密码 -e "source /tmp/export_new.sql" MY_DB

额外注意事项

  • 确保目标数据库MY_DB已经存在,如果不存在,先执行创建命令:
docker-compose exec MYSQL_CONTAINERNAME mysql -uroot -p你的数据库密码 -e "CREATE DATABASE IF NOT EXISTS MY_DB;"
  • 确认容器处于运行状态,可以用docker-compose ps查看容器状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:45:25