必须设置mysql_root_password且端口映射需手动固定为3306,否则容器无法初始化root用户或局域网客户端无法连接;挂载目录权限不足或路径错误(非/var/lib/mysql)亦会导致启动失败。

能直接装,但必须设 MYSQL_ROOT_PASSWORD,否则容器启动后无法登录;端口不手动固定为 3306,局域网客户端连不上是常态。
必须设置的环境变量只有 MYSQL_ROOT_PASSWORD
MySQL 8.0 官方镜像启动时会检测这个变量,没它就拒绝初始化 root 用户,日志里只报 Initialization of mysqld failed,没有更具体提示。其他变量如 MYSQL_DATABASE 或 MYSQL_USER 属于可选,不填不影响基础可用性。
-
MYSQL_ROOT_PASSWORD值必须是非空字符串,不能是纯数字或含特殊符号(如@、$)——DSM 的 Docker 图形界面会截断或转义,建议用字母+数字组合,比如MySqlRoot2026 - 不要设
MYSQL_ROOT_HOST除非你明确需要远程访问;默认localhost已足够让同在群晖上的其他容器(如 Tomcat)通过服务名连接 - 镜像启动后首次运行期间,该密码会被写入数据目录并固化,后续修改需进容器执行 SQL,不是改环境变量就能生效
端口映射必须手动指定本地端口为 3306
群晖 Docker 默认启用“自动端口映射”,结果常把 MySQL 映射到一个随机高位端口(如 32775),导致 Workbench、HeidiSQL 或 Java 应用连不上——它们默认找 :3306。
- 在容器配置的「网络端口」页,把「本地端口」从「自动」改为手动输入
3306,保持「容器端口」为3306 - 如果 NAS 所在局域网已有其他设备占用了
3306(比如另一台树莓派跑着 MySQL),必须换本地端口(如3307),同时所有客户端连接 URL 都要同步改成:3307 - 外网访问不在此列:路由器端口转发目标应指向 NAS 的
3306(或你设的自定义本地端口),而不是容器端口
/var/lib/mysql 映射路径权限容易被忽略
容器第一次启动时,会在挂载目录(如 /volume1/docker/mysql/data)里初始化数据库文件。如果群晖共享文件夹权限没开足,MySQL 进程会因无法写入而退出,日志显示 Permission denied 或卡在 mysqld: Can't create/write to file。
- 在 DSM「控制面板 → 共享文件夹」中,右键目标文件夹(如
mysql)→「编辑 → 权限」→ 勾选「所有人」的「读取/写入」,并「应用至所有子文件夹」 - 不要用系统默认的
/docker根目录直接挂载,它可能被 DSM 服务占用或受 ACL 限制;单独建个mysql共享文件夹更稳 - 挂载路径务必填
/var/lib/mysql(不是/data或/mysql),这是 MySQL 8.0 官方镜像硬编码的数据路径
真正卡住人的地方不在拉镜像或点启动,而在权限和端口这两步——尤其当 NAS 上已跑过旧版 MySQL 或 MariaDB,残留的 socket 文件或锁文件会让新容器反复失败,此时得进 SSH 清掉挂载目录里的 ib_logfile* 和 auto.cnf 再试。











