如何在Docker中运行MySQL并将数据持久化到自定义目录
如何在Docker中正确运行MySQL并将数据持久化到自定义目录
问题重现
执行以下命令尝试挂载自定义目录时,容器启动后立即停止:
docker run --name mysql-mac -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my_strong_password -d mysql:latest -v /Users/alexeyzhulin/Projects/data/mysql:/var/lib/mysql
查看容器日志,核心报错为:
2023-07-17T16:53:46.768297Z 0 [ERROR] [MY-010147] [Server] Too many arguments (first extra is '/Users/alexeyzhulin/Projects/data/mysql:/var/lib/mysql').
而不使用挂载命令时,容器能正常运行:
docker run --name mysql-mac -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my_strong_password -d mysql:latest
错误原因
Docker的命令参数规则是:所有容器运行选项(如-v、-p、-e)必须放在镜像名称之前。你把-v挂载参数放在了mysql:latest之后,Docker会将其当作传递给MySQL服务器的命令参数,而非Docker的运行配置,导致MySQL识别到多余参数,启动失败。
正确解决方案
调整-v参数的位置,将其移到镜像名mysql:latest之前,执行以下命令:
docker run --name mysql-mac -p 3306:3306 -e MYSQL_ROOT_PASSWORD=my_strong_password -v /Users/alexeyzhulin/Projects/data/mysql:/var/lib/mysql -d mysql:latest
额外注意事项
- 确保本地目录
/Users/alexeyzhulin/Projects/data/mysql已提前创建,避免Docker自动创建时权限异常:mkdir -p /Users/alexeyzhulin/Projects/data/mysql - Mac系统下如果遇到权限问题,可以调整本地目录的读写权限:
或者在启动命令中添加chmod 775 /Users/alexeyzhulin/Projects/data/mysql--user $(id -u):$(id -g),让容器使用当前用户身份运行,避免权限冲突。
内容的提问来源于stack exchange,提问作者Alex Zhulin
相关产品推荐
相关产品推荐

