必须挂载/var/lib/mysql,否则容器删除后数据全丢;推荐用命名卷(如-v mysql-data:/var/lib/mysql),docker自动管理路径权限,数据持久保留。

能,而且比手动 docker run 更稳、更可复现——关键在于配置要对,不是照抄 YAML 就完事。
为什么必须用 volumes 挂载 /var/lib/mysql
不挂载就等于把数据库文件放在容器临时层里:容器一删,数据全丢。哪怕只做本地测试,也建议立即挂载。
- 推荐用相对路径,比如
./mysql-data:/var/lib/mysql,便于项目目录整体迁移 - 宿主机对应目录(如
./mysql-data)首次启动前无需手动创建,Docker Compose 会自动建;但若已有旧数据,得确保权限为999:999(MySQL 官方镜像默认用户 ID) - 绝对路径也可用(如
/opt/mysql57/data:/var/lib/mysql),但跨机器部署时容易路径失效
environment 里哪些变量不能少
MySQL 官方镜像只认几个固定环境变量,写错或漏掉会导致容器反复重启或初始化失败。
MiniMax 图片理解 + 网络搜索 MCP 工具。适配 Docker 环境(极空间等),支持图片 OCR 识别、图像内容理解、网络搜索。API Key 安全存储在本地 credentials 文件,不暴露在代码中。
-
MYSQL_ROOT_PASSWORD:必须设置,否则容器启动失败,报错类似error: database is uninitialized and password option is not specified -
MYSQL_DATABASE(可选):指定后会自动创建该库,适合 iTop、WordPress 等需要预置库的应用 -
MYSQL_USER和MYSQL_PASSWORD(可选):用于创建普通用户,避免应用直连 root - 别写
MYSQL_ALLOW_EMPTY_PASSWORD=yes:这在 5.7 镜像中已被弃用,强行加会导致健康检查失败
字符集和 binlog 这类配置怎么加才生效
直接往 command 里塞参数看似简单,但易出错;推荐用挂载自定义 .cnf 文件,清晰且兼容性好。
- 新建
config/my.cnf,内容包含[mysqld]段,例如:[mysqld] character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci log-bin = /var/lib/mysql/mysql-bin server-id = 1
- 在
volumes中挂载:./config:/etc/mysql/conf.d(注意是conf.d,不是my.cnf的父目录) - 如果非要走
command,参数必须带双横线,且顺序无关,例如:--character-set-server=utf8mb4 --log-bin=mysql-bin - 开启 binlog 后,务必配
server-id,否则主从复制无法建立
启动后连不上?先看这三处
90% 的连接失败不是网络问题,而是配置没生效或服务没真正就绪。
- 执行
docker-compose logs mysql,重点找MySQL init process done. Ready for start up.—— 没这句说明初始化卡住了 - 检查端口映射是否冲突:
netstat -tuln | grep :3306,确认宿主机 3306 没被其他进程占用 - 容器内 MySQL 默认只监听
127.0.0.1;远程连接需在my.cnf加bind-address = 0.0.0.0,或改用network_mode: host(仅限单机调试)
最常被忽略的是:MySQL 5.7 容器启动后,需要几秒到十几秒完成初始化,healthcheck 或应用连接逻辑若没等它 ready,就会失败。别依赖“启动即可用”,加个 sleep 10 或用 docker wait 做前置等待更稳妥。










