如何在群晖NAS的Container中部署MySQL 8.0并映射端口

陌墨小哥_3957

陌墨小哥_3957

2026-09-24

771人浏览

原创

必须手动设置4个环境变量:mysql_root_password(非空无特殊字符)、mysql_initdb_skip_tzinfo=1、mysql_allow_empty_password=no、mysql_default_authentication_plugin=caching_sha2_password;端口映射须手动填3306:3306;挂载路径必须为/volume1/docker/mysql8/data→/var/lib/mysql且chown 999:999;中文乱码和远程访问需挂载custom.cnf配置文件。

如何在群晖nas的container中部署mysql 8.0并映射端口

Container Manager 启动 MySQL 8.0 容器必填的 4 个环境变量

群晖 DSM 7.2+ 的 Container Manager 图形界面无法满足 MySQL 8.0 启动的最小依赖,硬靠点选“运行”大概率秒退。根本原因不是镜像问题,而是它不暴露认证插件、字符集、健康检查等关键配置入口。你必须手动补全以下 4 个 MYSQL_* 环境变量:

  • MYSQL_ROOT_PASSWORD:必须是非空字符串,且不能含 $、@、# 等 shell 特殊符号——DSM 界面会截断或转义,日志只报 Initialization of mysqld failed
  • MYSQL_INITDB_SKIP_TZINFO=1:跳过时区初始化,避免因宿主机缺失 /usr/share/zoneinfo 导致失败
  • MYSQL_ALLOW_EMPTY_PASSWORD=no:显式关闭空密码 fallback,防止某些镜像版本降级到不安全模式
  • MYSQL_DEFAULT_AUTHENTICATION_PLUGIN=caching_sha2_password:MySQL 8.0.4+ 必须显式声明,否则初始化阶段认证插件不匹配,进程直接退出

端口映射必须手动填 3306:3306,禁用“自动”

Container Manager 默认启用自动端口映射,MySQL 容器常被分到 32768–32775 这类高位端口。Navicat、DBeaver、Java 应用默认连 :3306,根本找不到服务,连错端口只会看到“Connection refused”。

  • 在「网络端口」设置里,把「本地端口」从「自动」改成手动填 3306,容器端口保持 3306
  • 如果 NAS 所在局域网已有设备占了 3306(比如另一台树莓派或旧版 MySQL),那就填 3307,客户端连接 URL 也得同步改成 :3307
  • 别信“自动检测冲突”——界面不展示 [ERROR] [MY-010262] Bind on TCP/IP port: Address already in use,只显示“已停止”,你得自己查 netstat -tuln | grep :330

挂载路径必须是 /var/lib/mysql,其他路径全无效

MySQL 8.0 镜像硬编码了数据目录路径,挂载成 /data 或 /mysql 都不会生效。不挂对,等于没装数据库——删容器 = 丢库。

MySQL
MySQL

编写正确的MySQL查询,避免字符集、索引和锁方面的常见陷阱。

下载
  • 宿主机路径(如 /volume1/docker/mysql8/data)必须映射到容器内 /var/lib/mysql
  • 挂载前需提前创建目录并赋权:mkdir -p /volume1/docker/mysql8/data && chown -R 999:999 /volume1/docker/mysql8/data(MySQL 容器默认以 UID 999 运行)
  • Container Manager 不校验挂载权限,即使你 chmod 777,UID/GID 不匹配仍会导致 Permission denied 写入失败

中文乱码和远程访问必须靠自定义配置文件

Container Manager 不支持传入 --character-set-server=utf8mb4 这类命令行参数,所以仅靠环境变量无法解决中文乱码和远程访问问题。你必须额外挂载一个 custom.cnf 文件。

  • 在 NAS 上创建 /volume1/docker/mysql8/conf/custom.cnf,内容为:
[mysqld]
default_authentication_plugin = caching_sha2_password
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
bind-address = 0.0.0.0
  • 在「卷」设置中,将该文件映射为 /etc/mysql/conf.d/custom.cnf(注意是 .cnf 后缀,MySQL 会自动加载 conf.d 下所有 .cnf 文件)
  • 配置生效后,还需进容器执行:CREATE USER 'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'your_password'; GRANT ALL ON *.* TO 'root'@'%'; FLUSH PRIVILEGES;
  • 最易被忽略的是挂载权限与 UID/GID 匹配——哪怕路径、端口、环境变量全对,chown 漏掉一步,容器就卡在 “Starting MySQL database server” 不动,日志里没有任何错误提示,只有 mysqld 进程静默退出。

    相关文章

    PHP速学视频免费教程(入门到精通)
    PHP速学视频免费教程(入门到精通)

    PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

    下载

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

    相关专题

    更多
    mysql修改数据表名
    mysql修改数据表名

    MySQL修改数据表:1、首先查看数据库中所有的表,代码为:‘SHOW TABLES;’;2、修改表名,代码为:‘ALTER TABLE 旧表名 RENAME [TO] 新表名;’。php中文网还提供MySQL的相关下载、相关课程等内容,供大家免费下载使用。

    2023.06.20

    1953

    6

    MySQL创建存储过程
    MySQL创建存储过程

    存储程序可以分为存储过程和函数,MySQL中创建存储过程和函数使用的语句分别为CREATE PROCEDURE和CREATE FUNCTION。使用CALL语句调用存储过程智能用输出变量返回值。函数可以从语句外调用(通过引用函数名),也能返回标量值。存储过程也可以调用其他存储过程。php中文网还提供MySQL创建存储过程的相关下载、相关课程等内容,供大家免费下载使用。

    2023.06.21

    1199

    5

    mongodb和mysql的区别
    mongodb和mysql的区别

    mongodb和mysql的区别:1、数据模型;2、查询语言;3、扩展性和性能;4、可靠性。本专题为大家提供mongodb和mysql的区别的相关的文章、下载、课程内容,供大家免费下载体验。

    2023.07.18

    715

    5

    mysql密码忘了怎么查看
    mysql密码忘了怎么查看

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql密码忘了怎么办呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    2023.07.19

    2552

    5

    mysql创建数据库
    mysql创建数据库

    MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS 应用软件之一。那么mysql怎么创建数据库呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

    2023.07.25

    4188

    4

    mysql默认事务隔离级别
    mysql默认事务隔离级别

    MySQL是一种广泛使用的关系型数据库管理系统,它支持事务处理。事务是一组数据库操作,它们作为一个逻辑单元被一起执行。为了保证事务的一致性和隔离性,MySQL提供了不同的事务隔离级别。php中文网给大家带来了相关的教程以及文章欢迎大家前来学习阅读。

    2023.08.08

    999

    3

    sqlserver和mysql区别
    sqlserver和mysql区别

    SQL Server和MySQL是两种广泛使用的关系型数据库管理系统。它们具有相似的功能和用途,但在某些方面存在一些显著的区别。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    2023.08.11

    4451

    4

    mysql忘记密码
    mysql忘记密码

    MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。那么忘记mysql密码我们该怎么解决呢?php中文网给大家带来了相关的教程以及其他关于mysql的文章,欢迎大家前来学习阅读。

    2023.08.14

    4022

    7

    mysql事务隔离级别
    mysql事务隔离级别

    mysql规范中定义了四种事务隔离级别,不同的隔离级别对事务的处理有所不同。本专题为大家提供mysql事务隔离级别相关的文章内容,大家可以免费体验。

    2023.08.16

    5194

    11

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    PostgreSQL vs MySQL
    PostgreSQL vs MySQL

    共1课时 | 172人学习

    使用phpenv集成环境安装极致CMS
    使用phpenv集成环境安装极致CMS

    共2课时 | 275人学习