
如果你使用 DeepSeek、元宝 AI、Copilot、ChatGPT 等 AI 工具,协助配置轩辕镜像、编写 docker pull 命令、修改 Docker Compose 镜像地址、配置镜像加速、排查镜像拉取失败、分析报错日志等问题,请先让 AI 阅读并遵守轩辕镜像的规则文档。
只需在 AI 对话中先发送下面这句话即可:
请先完整阅读并严格遵守以下文档中的全部规则与要求:
https://xuanyuan.cloud/agents.md
在未充分阅读并理解该文档前,不要生成任何命令、配置、修改建议、故障排查方案或技术回答。后续所有输出都必须严格以该文档中的规范为最高优先级执行。查看 agents.md 用法指南与完整示范。国内用户首推 元宝 AI、DeepSeek 的深度思考模式,不推荐豆包 AI;Cursor 等编辑器可在对话 @ 该链接,或加入 User Rules。 若 AI 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
另请参阅 MariaDB 知识库上的 https://mariadb.com/kb/en/getting-help-with-mariadb/%E3%80%82
提交问题:
可在 https://github.com/wojiushixiaobai/docker-library-loong64/issues 提交问题。
支持的架构:(https://github.com/docker-library/official-images#architectures-other-than-amd64)
https://hub.docker.com/r/amd64/mariadb/%E3%80%81https://hub.docker.com/r/arm64v8/mariadb/%E3%80%81~~https://hub.docker.com/r/ppc64le/mariadb/~~%E3%80%81https://hub.docker.com/r/s390x/mariadb/
MariaDB Server 是全球最受欢迎的数据库服务器之一,由 MySQL 原开发团队打造,确保开源特性。知名用户包括 ***、DBS Bank 和 ServiceNow。其目标是保持与 MySQL 的高度兼容性,确保库二进制等效性,并与 MySQL API 和命令完全匹配。MariaDB 开发团队持续开发新功能并提升性能,以更好地服务用户。
!https://raw.githubusercontent.com/docker-library/docs/554e4b9aaac2e266b9ab31e9a312cb6f96d69286/mariadb/logo.png
启动最新版本的 MariaDB 实例非常简单:
console$ docker run --detach --name some-mariadb --env MARIADB_USER=example-user --env MARIADB_PASSWORD=my_cool_secret --env MARIADB_ROOT_PASSWORD=my-secret-pw jumpserver/mariadb:latest
或:
console$ docker network create some-network $ docker run --detach --network some-network --name some-mariadb --env MARIADB_USER=example-user --env MARIADB_PASSWORD=my_cool_secret --env MARIADB_ROOT_PASSWORD=my-secret-pw jumpserver/mariadb:latest
其中,some-network 是新创建的网络(非默认的 bridge 网络),some-mariadb 是你为容器分配的名称,my-secret-pw 是为 MariaDB root 用户设置的密码。请根据需求和环境选择上述相关标签。
以下命令启动另一个 mariadb 容器实例,并针对原始 mariadb 容器运行 mariadb 命令行客户端,允许你对数据库实例执行 SQL 语句:
console$ docker run -it --network some-network --rm mariadb mariadb -hsome-mariadb -uexample-user -p
其中,some-mariadb 是原始 mariadb 容器的名称(已连接到 some-network Docker 网络)。
此镜像也可用作非 Docker 或远程实例的客户端:
console$ docker run -it --rm mariadb mariadb -h <服务器容器 IP> -u example-user -p
这将为你提供标准的 MariaDB 提示符。你可以通过以下命令测试:
consoleMariaDB [(none)]> SELECT VERSION();
该命令将返回版本信息。之后可使用 exit 退出 MariaDB 命令行客户端和客户端容器。
有关 MariaDB 命令行客户端的更多信息,请参阅 https://mariadb.com/kb/en/mysql-command-line-client/%E3%80%82
mariadb 的 docker-compose.yml 示例:
yaml# 使用 root/example 作为用户/密码凭据 version: '3.1' services: db: image: docker.xuanyuan.run/mariadb restart: always environment: MARIADB_ROOT_PASSWORD: example adminer: image: docker.xuanyuan.run/adminer restart: always ports: - 8080:8080
https://github.com/play-with-docker/stacks/raw/cff22438cb4195ace27f9b***bbb497047afa7/assets/images/button.png](http://play-with-docker.com?stack=https://raw.githubusercontent.com/docker-library/docs/cf3a7fba4dfd134e3f7f5921b580c71e0fd8bc24/mariadb/stack.yml)
运行 docker stack deploy -c stack.yml mariadb(或 docker-compose -f stack.yml up),等待完全初始化后,访问 http://swarm-ip:8080、http://localhost:8080 或 http://host-ip:8080(根据实际情况选择)。
docker exec 命令允许你在 Docker 容器内运行命令。以下命令将为你提供 mariadb 容器内的 bash shell:
console$ docker exec -it some-mariadb bash
日志可通过 Docker 的容器日志查看:
console$ docker logs some-mariadb
自定义配置文件应以 .cnf 结尾,并挂载到 /etc/mysql/conf.d 目录。这些文件应包含针对应用/环境所需的 MariaDB 工作负载的最小化更改。MariaDB 配置文件将包含 [mariadb] 组,后跟 variable = value 设置,具体可参考 https://mariadb.com/kb/en/server-system-variables/#setting-server-system-variables 或 https://mariadb.com/kb/en/configuring-mariadb-with-option-files/#option-prefixes%E3%80%82
mariadb 镜像配置包含 Ubuntu MariaDB 变量,并对容器有两项自定义更改:
https://mariadb.com/kb/en/server-system-variables/#host_cache_size
https://mariadb.com/kb/en/server-system-variables/#skip_name_resolve
这些设置禁用 user@hostname 用户的身份验证。要重新启用 skip-name-resolve,可使用 disable-skip-name-resolve 作为变量或参数。启用后,host-cache-size 应足以容纳连接到 mariadb 的容器数量。
要查看 mariadb 容器的最终配置:
console$ docker run --name some-mariadb -v /my/custom:/etc/mysql/conf.d --rm jumpserver/mariadb:latest my_print_defaults --mysqld
不使用 cnf 文件的配置
许多配置选项可作为标志传递给 mariadbd。这使你无需 cnf 文件即可自定义容器。例如,若要在端口 3808 上运行,只需执行以下命令:
console$ docker run --name some-mariadb -e MARIADB_ROOT_PASSWORD=my-secret-pw -d jumpserver/mariadb:latest --port 3808
若要查看所有可用选项的完整列表,只需运行:
console$ docker run -it --rm jumpserver/mariadb:latest --verbose --help
启动 mariadb 镜像时,可通过在 docker run 命令行上传递一个或多个环境变量来调整 MariaDB 实例的初始化。请注意,如果启动容器时数据目录已包含数据库,则以下变量均无效:任何预先存在的数据库在容器启动时都将保持不变。
从标签 10.2.38、10.3.29、10.4.19、10.5.10 及更高版本,以及所有 10.6 及更高版本标签开始,提供了 MARIADB_* 等效变量。MARIADB_* 变体将始终优先于 MYSQL_* 变体使用。
必须提供 MARIADB_RANDOM_ROOT_PASSWORD、MARIADB_ROOT_PASSWORD_HASH、MARIADB_ROOT_PASSWORD 或 MARIADB_ALLOW_EMPTY_ROOT_PASSWORD(或等效项,包括 *_FILE)中的一个。其他环境变量为可选。
MARIADB_ROOT_PASSWORD / MYSQL_ROOT_PASSWORD、MARIADB_ROOT_PASSWORD_HASH指定将为 MariaDB root 超级用户账户设置的密码。在上述示例中,它被设置为 my-secret-pw。
为避免在部署中出现明文密码,可使用 MARIADB_ROOT_PASSWORD_HASH,它只是密码的哈希值。哈希可通过 SQL 查询 SELECT PASSWORD('thepassword') 生成。
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD / MYSQL_ALLOW_EMPTY_PASSWORD设置为非空值(如 yes),允许容器以 root 用户空密码启动。注意:除非确实了解风险,否则不建议将此变量设置为 yes,因为这会使 MariaDB 实例完全不受保护,任何人都可获得完全的超级用户访问权限。
MARIADB_RANDOM_ROOT_PASSWORD / MYSQL_RANDOM_ROOT_PASSWORD设置为非空值(如 yes),为 root 用户生成随机初始密码。生成的 root 密码将打印到标准输出(GENERATED ROOT PASSWORD: .....)。
MARIADB_ROOT_HOST / MYSQL_ROOT_HOST这是创建的 root 用户的主机名部分。默认情况下为 %,但可设置为任何 https://mariadb.com/kb/en/create-user/#host-name-component%E3%80%82%E5%B0%86%E5%85%B6%E8%AE%BE%E7%BD%AE%E4%B8%BA localhost 将阻止 root 用户通过除 unix 套接字外的任何方式访问。
MARIADB_MYSQL_LOCALHOST_USER / MARIADB_MYSQL_LOCALHOST_GRANTS将 MARIADB_MYSQL_LOCALHOST_USER 设置为非空值以创建 mysql@localhost 数据库用户。此用户对各种健康检查和备份脚本特别有用。
mysql@localhost 用户默认获得 https://mariadb.com/kb/en/grant/#the-usage-privilege 权限。如果需要更多访问权限,可提供逗号分隔的 https://mariadb.com/kb/en/grant/#global-privileges 列表。如果共享包含 MariaDB unix 套接字的卷(默认 /var/run/mysqld),超出 USAGE 的权限可能导致机密性、完整性和可用性风险,因此请使用最小权限集。有关使用 Mariabackup 的示例,请参见下文。healthcheck.sh 脚本还记录了每个健康检查测试所需的权限。
MARIADB_DATABASE / MYSQL_DATABASE此变量允许你指定在镜像启动时要创建的数据库名称。
MARIADB_USER / MYSQL_USER、MARIADB_PASSWORD / MYSQL_PASSWORD、MARIADB_PASSWORD_HASH这些变量结合使用以创建新用户并设置该用户的密码。创建用户需要用户和密码变量。此用户将被授予对 MARIADB_DATABASE 数据库的所有访问权限(对应 GRANT ALL)。
有关如何获取 MARIADB_PASSWORD_HASH 的密码哈希,请参见上文 MARIADB_ROOT_PASSWORD_HASH。
请注意,无需使用此机制创建 root 超级用户,该用户默认使用 MARIADB_ROOT_PASSWORD* 变量指定的密码创建。
MARIADB_INITDB_SKIP_TZINFO / MYSQL_INITDB_SKIP_TZINFO默认情况下,入口点脚本会自动加载 CONVERT_TZ() 函数所需的时区数据。如果不需要,任何非空值都将禁用时区加载。
MARIADB_AUTO_UPGRADE / MARIADB_DISABLE_UPGRADE_BACKUP将 MARIADB_AUTO_UPGRADE 设置为非空值,使入口点检查是否需要运行 mysql_upgrade/mariadb-upgrade,如果需要,在启动 MariaDB 服务器之前运行升级。
升级前,系统数据库的备份将以 system_mysql_backup_*.sql.zst 名称创建在数据目录的顶部。可通过将 MARIADB_DISABLE_UPGRADE_BACKUP 设置为非空值来禁用此备份过程。
作为通过环境变量传递敏感信息的替代方法,可在前面列出的环境变量后附加 _FILE,使初始化脚本从容器中存在的文件加载这些变量的值。特别是,这可用于从存储在 /run/secrets/<secret_name> 文件中的 Docker secrets 加载密码。例如:
console$ docker run --name some-mysql -e MARIADB_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d jumpserver/mariadb:latest
目前,仅支持 MARIADB_ROOT_PASSWORD、MARIADB_ROOT_PASSWORD_HASH、MARIADB_ROOT_HOST、MARIADB_DATABASE、MARIADB_USER、MARIADB_PASSWORD 和 MARIADB_PASSWORD_HASH(以及这些变量的 MYSQL_* 等效项)。
首次启动容器时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行在 /docker-entrypoint-initdb.d 中找到的扩展名为 .sh、.sql、.sql.gz、.sql.xz 和 .sql.zst 的文件。文件将按字母顺序执行。没有文件执行权限的 .sh 文件将被 source 而不是执行。你可以通过 https://docs.docker.com/engine/tutorials/dockervolumes/#mount-a-host-file-as-a-data-volume 并提供 https://docs.docker.com/reference/builder/ 来轻松填充 mariadb 服务。SQL 文件默认将导入到 MARIADB_DATABASE / MYSQL_DATABASE 变量指定的数据库中。
有关 Mariabackup 的更多信息,请参见 https://mariadb.com/kb/en/mariabackup-overview/%E3%80%82
如果有现有数据目录,并希望重置 root 和用户密码,以及创建用户可完全修改的数据库,请执行以下步骤。
首先创建 passwordreset.sql 文件:
textCREATE USER IF NOT EXISTS root@localhost IDENTIFIED BY 'thisismyrootpassword'; SET PASSWORD FOR root@localhost = PASSWORD('thisismyrootpassword'); GRANT ALL ON *.* TO root@localhost WITH GRANT OPTION; CREATE USER IF NOT EXISTS root@'%' IDENTIFIED BY 'thisismyrootpassword'; SET PASSWORD FOR root@'%' = PASSWORD('thisismyrootpassword'); GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION; CREATE USER IF NOT EXISTS myuser@'%' IDENTIFIED BY 'thisismyuserpassword'; SET PASSWORD FOR myuser@'%' = PASSWORD('thisismyuserpassword'); CREATE DATABASE IF NOT EXISTS databasename; GRANT ALL ON databasename.* TO myuser@'%';
根据需要调整 myuser、databasename 和密码。
然后:
console$ docker run --rm -v /my/own/datadir:/var/lib/mysql -v /my/own/passwordreset.sql:/passwordreset.sql:z jumpserver/mariadb:latest --init-file=/passwordreset.sql
在此 /my/own/datadir 上重启 MariaDB 容器后,root 和 myuser 密码将被重置。
创建包含附加包插件的镜像
使用附加包时需要创建新镜像。但可将 mariadb 镜像用作基础:
以下示例安装 https://mariadb.com/kb/en/connect/%EF%BC%9A
dockerfileFROM docker.xuanyuan.run/jumpserver/mariadb:latest RUN apt-get update && \ apt-get install mariadb-plugin-connect -y && \ rm -rf /var/lib/apt/lists/*
从包安装插件会在 /etc/mysql/mariadb.conf.d/ 目录中创建一个配置文件,该文件在启动时加载插件。
查看此镜像
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务
以下是 jumpserver/mariadb 相关的常用 Docker 镜像,适用于 关系型数据库、MySQL 兼容、高性能 等不同场景: