群晖DSM启动MySQL 8.0容器需三步核心操作:1. 必设非空无特殊字符的MYSQL_ROOT_PASSWORD;2. 挂载路径严格为/volume1/docker/mysql8/data→/var/lib/mysql并开放共享文件夹“所有人”读写权限;3. 手动指定端口映射3306:3306(或3307等备用端口),禁用自动映射。

直接拉镜像、点启动、填密码,三步就能跑起来;但跳过权限设置或端口映射,容器大概率闪退或连不上——这不是配置问题,是群晖对 Docker 的权限和路径管控更严格了。
必须设 MYSQL_ROOT_PASSWORD,且不能含特殊字符
MySQL 8.0 官方镜像启动时只认这个环境变量,不设就卡在初始化,日志里只报 Initialization of mysqld failed,没别的提示。
- 值必须是非空字符串,推荐纯字母+数字组合,比如
MySqlRoot2026 - 避免用
@、$、#等符号,DSM 图形界面会截断或转义,导致密码实际为空 - 设完后密码就固化在
/var/lib/mysql数据目录里,后续改密码得进容器执行 SQL,不是改环境变量就行
挂载路径必须是 /var/lib/mysql,且宿主机目录要有写权限
官方镜像硬编码了数据路径,挂成 /data 或 /mysql 都无效;更关键的是,群晖 ACL 权限默认不放行写入,容器一启动就因 Permission denied 退出。
- 在 DSM「控制面板 → 共享文件夹」里,右键你建的 mysql 文件夹(比如
/volume1/docker/mysql8/data)→「编辑 → 权限」→ 勾选「所有人」的「读取/写入」并「应用至所有子文件夹」 - 别直接用系统默认的
/docker根目录,它可能被 DSM 自身服务占用 - 装载路径字段里必须填
/var/lib/mysql,不是其他任何路径
端口映射必须手动填 3306:3306,别信“自动”
群晖 Docker 默认启用自动端口映射,MySQL 容器常被分到 32768–32775 这类高位端口,Workbench、Navicat、Java 应用全连不上——它们默认只找 3306。
- 在「网络端口」设置里,把「本地端口」从「自动」改成手动填
3306,容器端口保持3306 - 如果 NAS 所在局域网已有设备占了
3306(比如另一台树莓派),那就填3307,客户端连接时 URL 也得同步改成:3307 - 外网访问时,路由器端口转发目标应指向 NAS 的这个本地端口(比如
3307),不是容器端口
远程连不上?先检查 caching_sha2_password 和 % 用户
MySQL 8.0 默认 root 只允许 localhost 登录,且认证插件是 caching_sha2_password,多数 GUI 工具(HeidiSQL、旧版 Navicat)不支持,连上也报错。
- 进容器执行:
docker exec -it mysql8-main mysql -uroot -p,输密码后运行: CREATE USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY 'your_strong_pass';GRANT ALL ON *.* TO 'admin'@'%' WITH GRANT OPTION;FLUSH PRIVILEGES;- 别动
root用户的认证方式,DSM 后续升级可能依赖它
真正卡住人的地方不在拉镜像或点启动,而在挂载路径权限、环境变量字符限制、端口映射这三处——尤其是当你 NAS 上曾跑过旧版 MySQL,残留的权限或端口冲突会直接让新容器反复重启。


















