必须挂载 /var/lib/mysql 到群晖共享文件夹并设为读写,环境变量填 MYSQL_ROOT_PASSWORD 和 MYSQL_ROOT_HOST=%,端口映射手动设本地端口(如6033)与容器端口3306,同时路由器需转发对应本地端口。

直接用群晖 Docker UI 启动 MySQL 5.7 容器就行,不用命令行
群晖 DSM 6.2+ 和 Container Manager(DSM 7.x)都支持图形化创建容器,只要镜像拉下来,填对 MYSQL_ROOT_PASSWORD 环境变量,3 分钟内就能连上。关键不是“能不能”,而是“哪些字段必须填、哪些容易填错”。
必须挂载 /var/lib/mysql 到群晖共享文件夹
不挂载就等于没持久化——容器一删,库全丢。群晖里不能只靠“映像启动”,得进“高级设置 → 卷 → 添加文件夹”手动配:
- 选择你提前建好的共享文件夹(比如
docker/mysql57/data),设为“读写” - 装载路径必须填
/var/lib/mysql(不是/etc/mysql或/data) - 别信某些教程写的
/opt/mysql或/mysql,MySQL 5.7 官方镜像只认/var/lib/mysql - 首次启动前,确保该文件夹为空;如果已有数据,要确认是 MySQL 5.7 的物理文件结构,否则容器会启动失败并报
mysqld: Can't read dir of '/etc/mysql/conf.d/'类错误
MYSQL_ROOT_HOST 不设就默认只允许本地连接
群晖默认不开放远程访问,即使端口映射了,从局域网其他机器连也会被拒。解决方法很简单:在“环境”里加一条:
- 名称填
MYSQL_ROOT_HOST,值填%(百分号,不是星号或空) - 这个变量只对 5.7 有效;8.0 要额外改认证插件,5.7 不需要
- 如果只想允特定 IP(比如仅限 192.168.1.100),值就写
192.168.1.100,但注意 MySQL 用户权限仍需后续进容器执行GRANT - 不设这行,
mysql -h 群晖IP -u root -p一定会报Host 'xxx' is not allowed to connect to this MySQL server
端口映射别用“自动”,NAS 端口和容器端口要分开填
群晖的“自动”映射容易把容器端口错绑到随机宿主端口,导致 Navicat 连不上还查不出原因。务必手动设:
- 本地端口:填你希望外部访问的端口号,比如
6033(避开路由器常用端口,也防冲突) - 容器端口:固定填
3306(MySQL 5.7 默认监听端口,改它要额外配my.cnf) - 如果同时跑多个 MySQL 容器(比如 5.7 + 8.0),每个的本地端口必须不同,但容器端口都可以是
3306 - 路由器端口转发也要同步设成你填的“本地端口”,比如填了
6033就转6033,不是3306
最常被忽略的一点:群晖的防火墙默认放行所有局域网流量,但如果你开了“启用防火墙”并自定义规则,记得检查是否屏蔽了你设的本地端口——哪怕容器日志显示正常启动,端口不通照样连不上。


















