使用自定义 MySQL 配置文件
MySQL 的默认配置可以在 /etc/mysql/my.cnf 中找到,其中可能 !includedir 附加目录,例如 /etc/mysql/conf.d 或 /etc/mysql/mysql.conf.d。请检查 mysql 映像本身中的相关文件和目录以获取更多详细信息。
如果/my/custom/config-file.cnf是你的自定义配置文件的路径和名称,你可以这样启动你的mysql容器(注意这个命令中只使用了自定义配置文件的目录路径):
$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
这将启动一个新容器 some-mysql,其中 MySQL 实例使用来自 /etc/mysql/my.cnf 和 /etc/mysql/conf.d/config-file.cnf 的组合启动设置,后者的设置优先.
没有 cnf 文件的配置
许多配置选项可以作为标志传递给 mysqld。这将使您可以灵活地自定义容器,而无需 cnf 文件。例如,如果要将所有表的默认编码和排序规则更改为使用 UTF-8 (utf8mb4),只需运行以下命令:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
如果您想查看可用选项的完整列表,只需运行:
$ docker run -it --rm mysql:tag --verbose --help
环境变量
启动mysql镜像时,可以通过在docker run命令行中传入一个或多个环境变量来调整MySQL实例的配置。请注意,如果您使用已包含数据库的数据目录启动容器,则以下任何变量都不会产生任何影响:在容器启动时,任何预先存在的数据库将始终保持不变。
另请参阅 https://dev.mysql.com/doc/refman/5.7/en/environment-variables.html 以获取 MySQL 本身所尊重的环境变量的文档(尤其是像 MYSQL_HOST 这样的变量,已知它在与此一起使用时会导致问题)镜像)。
MYSQL_ROOT_PASSWORD
此变量是必需的,它指定将为 MySQL root 超级用户帐户设置的密码。在上面的例子中,它被设置为 my-secret-pw。
MYSQL_DATABASE
此变量是可选的,允许您指定要在映像启动时创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对该数据库的超级用户访问权限(对应于 GRANT ALL)。
MYSQL_USER, MYSQL_PASSWORD
这些变量是可选的,结合使用来创建新用户和设置该用户的密码。该用户将被授予对 MYSQL_DATABASE 变量指定的数据库的超级用户权限(见上文)。创建用户需要这两个变量。
请注意,无需使用此机制来创建 root 超级用户,默认情况下会使用 MYSQL_ROOT_PASSWORD 变量指定的密码创建该用户。
MYSQL_ALLOW_EMPTY_PASSWORD
这是一个可选变量。设置为非空值,如 yes,以允许使用 root 用户的空白密码启动容器。注意:除非您真的知道自己在做什么,否则不建议将此变量设置为 yes,因为这将使您的 MySQL 实例完全不受保护,允许任何人获得完全的超级用户访问权限。
MYSQL_RANDOM_ROOT_PASSWORD
这是一个可选变量。设置为非空值,如 yes,为 root 用户生成随机初始密码(使用 pwgen)。生成的 root 密码将打印到 stdout (GENERATED ROOT PASSWORD: .....)。
MYSQL_ONETIME_PASSWORD
初始化完成后,将 root(不是 MYSQL_USER 中指定的用户!)用户设置为过期,强制在首次登录时更改密码。任何非空值都将激活此设置。注意:此功能仅在 MySQL 5.6+ 上受支持。在 MySQL 5.5 上使用此选项将在初始化期间引发适当的错误。
MYSQL_INITDB_SKIP_TZINFO
默认情况下,入口点脚本会自动加载 CONVERT_TZ() 函数所需的时区数据。如果不需要,任何非空值都会禁用时区加载。
Docker Secrets
作为通过环境变量传递敏感信息的替代方法,可以将 _FILE 附加到先前列出的环境变量,从而使初始化脚本从容器中存在的文件中加载这些变量的值。特别是,这可用于从存储在 /run/secrets/
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag
目前,仅支持 MYSQL_ROOT_PASSWORD、MYSQL_ROOT_HOST、MYSQL_DATABASE、MYSQL_USER 和 MYSQL_PASSWORD。