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

Dockerfile CMD无法为MySQL 5.7镜像执行多命令问题排查

MySQL容器创建异常数据目录的原因及解决方法

问题原因

你用的是exec格式的CMD(数组写法),这种模式下Docker不会启动Shell解析命令里的分号、管道这类语法,而是直接把整个字符串"--datadir=/data ; sh db_translations.sh"当作MySQL的单个参数传递。MySQL会把--datadir=后面的所有内容(包括; sh db_translations.sh)都识别成数据目录的路径,自然就创建了名字奇怪的目录。

解决方法

方法1:改用Shell格式的CMD

把CMD写成字符串形式,Docker会自动调用/bin/sh解析命令,分号就能正常分隔两个操作:

CMD "mysqld --datadir=/data && sh db_translations.sh"

或者显式指定Shell执行,避免歧义:

CMD ["/bin/sh", "-c", "mysqld --datadir=/data && sh db_translations.sh"]

方法2:结合ENTRYPOINT和CMD

如果想要保留exec格式的特性,可以通过组合ENTRYPOINT和CMD实现:

ENTRYPOINT ["/bin/sh", "-c"]
CMD ["mysqld --datadir=/data & sh db_translations.sh && wait"]

这种写法会先启动MySQL后台进程,执行脚本后等待进程结束,避免容器提前退出。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 15:45:30