
如果你使用 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 无法访问外链,可 打开说明文档 复制全文粘贴。文档会随站点更新,复制内容可能过期,建议定期检查。
本容器镜像包含适用于OpenShift和通用场景的MariaDB 10.2 SQL数据库服务器。用户可选择基于RHEL、CentOS或Fedora的镜像:RHEL镜像可在Red Hat Container Catalog获取,CentOS镜像在https://hub.docker.com/r/centos/%EF%BC%8CFedora%E9%95%9C%E5%83%8F%E5%9C%A8Fedora Registry。生成的镜像可使用https://github.com/containers/libpod%E8%BF%90%E8%A1%8C%E3%80%82
注意:本文档示例中使用
podman命令,所有此类命令均可替换为docker,参数保持不变。
--memory参数且未指定部分配置时,自动根据可用内存计算参数值。适用于需要容器化部署MariaDB 10.2的各类场景,包括:
以Red Hat Container Catalog的rhscl/mariadb-102-rhel7镜像为例,仅设置必填环境变量且不持久化数据:
bashdocker run -d --name mariadb_database -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 rhscl/mariadb-102-rhel7
上述命令创建名为mariadb_database的容器,运行MySQL服务,创建数据库db及用户user:pass,并将容器3306端口映射到主机。
如需数据持久化,添加-v /host/db/path:/var/lib/mysql/data参数(/host/db/path为主机目录):
bashdocker run -d --name mariadb_database -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -e MYSQL_DATABASE=db -p 3306:3306 -v /host/db/path:/var/lib/mysql/data rhscl/mariadb-102-rhel7
mysql_install_db,设置必要的数据库用户和密码。mysqld将以PID 1运行。docker stop mariadb_database。通过-e VAR=VALUE设置以下环境变量:
必选环境变量
MYSQL_USER:创建的MySQL用户名。MYSQL_PASSWORD:用户密码。MYSQL_DATABASE:数据库名称。MYSQL_ROOT_PASSWORD(可选):root用户密码,用于远程访问。影响MySQL配置的可选环境变量
MYSQL_LOWER_CASE_TABLE_NAMES(默认:0):控制表名存储和比较方式。MYSQL_MAX_CONNECTIONS(默认:151):最大并发客户端连接数。MYSQL_MAX_ALLOWED_PACKET(默认:200M):单个数据包或生成/中间字符串的最大大小。MYSQL_FT_MIN_WORD_LEN(默认:4):FULLTEXT索引包含的最小词长。MYSQL_FT_MAX_WORD_LEN(默认:20):FULLTEXT索引包含的最大词长。MYSQL_AIO(默认:1):控制innodb_use_native_aio设置,用于修复原生AIO问题。MYSQL_TABLE_OPEN_CACHE(默认:400):所有线程打开的表数量。MYSQL_KEY_BUFFER_SIZE(默认:32M或可用内存的10%):索引块缓冲区大小。MYSQL_SORT_BUFFER_SIZE(默认:256K):排序操作使用的缓冲区大小。MYSQL_READ_BUFFER_SIZE(默认:8M或可用内存的5%):顺序扫描使用的缓冲区大小。MYSQL_INNODB_BUFFER_POOL_SIZE(默认:32M或可用内存的50%):InnoDB缓存表和索引数据的缓冲池大小。MYSQL_INNODB_LOG_FILE_SIZE(默认:8M或可用内存的15%):每个日志文件的大小。MYSQL_INNODB_LOG_BUFFER_SIZE(默认:8M或可用内存的15%):InnoDB写入日志文件的缓冲区大小。MYSQL_DEFAULTS_FILE(默认:/etc/my.cnf):指定替代配置文件路径。MYSQL_BINLOG_FORMAT(默认:statement):binlog格式,支持row和statement。MYSQL_LOG_QUERIES_ENABLED(默认:0):设为1启用查询日志。通过-v /host:/container挂载以下目录:
/var/lib/mysql/data:MySQL数据目录,用于持久化数据。注意:挂载主机目录到容器时,需确保目录权限正确,且目录的所有者和组与容器内运行的用户UID或名称匹配。
当镜像以--memory参数运行且未指定部分参数时,其值将根据可用内存自动计算:
MYSQL_KEY_BUFFER_SIZE:默认10%的可用内存。MYSQL_READ_BUFFER_SIZE:默认5%的可用内存。MYSQL_INNODB_BUFFER_POOL_SIZE:默认50%的可用内存。MYSQL_INNODB_LOG_FILE_SIZE:默认15%的可用内存。MYSQL_INNODB_LOG_BUFFER_SIZE:默认15%的可用内存。MYSQL_ROOT_PASSWORD环境变量设置密码后,允许远程访问;本地连接仍无需密码。MYSQL_ROOT_PASSWORD并重启容器。数据库用户(MYSQL_USER)和root用户的密码仅支持通过修改环境变量MYSQL_PASSWORD和MYSQL_ROOT_PASSWORD更改。通过SQL语句或其他方式修改会导致环境变量值与实际密码不匹配,容器启动时将重置为环境变量值。
通过MYSQL_DEFAULTS_FILE环境变量指定替代配置文件路径,默认值为/etc/my.cnf。例如:
bashdocker run -e MYSQL_DEFAULTS_FILE=/etc/mysql/my.cnf ...
可通过OpenShift的Source构建策略或独立的https://github.com/openshift/source-to-image%EF%BC%88s2i%EF%BC%89%E5%B7%A5%E5%85%B7%E6%89%A9%E5%B1%95%E9%95%9C%E5%83%8F%E3%80%82%E4%BB%A5%60rhscl/mariadb-102-rhel7%60%E9%95%9C%E5%83%8F%EF%BC%88OpenShift%E4%B8%AD%E6%A0%87%E7%AD%BE%E4%B8%BA%60mariadb:10.2%60%EF%BC%89%E4%B8%BA%E4%BE%8B%EF%BC%9A
构建自定义镜像my-mariadb-rhel7,配置来自GitHub仓库:
bashoc new-app mariadb:10.2~https://github.com/sclorg/mariadb-container.git \ --name my-mariadb-rhel7 \ --context-dir=examples/extend-image \ --env MYSQL_OPERATIONS_USER=opuser \ --env MYSQL_OPERATIONS_PASSWORD=oppass \ --env MYSQL_DATABASE=opdb \ --env MYSQL_USER=user \ --env MYSQL_PASSWORD=pass
bashs2i build --context-dir=examples/extend-image https://github.com/sclorg/mariadb-container.git rhscl/mariadb-102-rhel7 my-mariadb-rhel7
扩展目录可包含以下子目录,文件将复制到容器的/opt/app-root/src目录,用户文件优先于默认文件:
mysql-cfg/:存放mysqld配置文件,启动时会运行envsubst以支持环境变量替换。mysql-pre-init/:存放*.sh脚本,在mysqld启动前执行。mysql-init/:存放*.sh脚本,在mysqld本地启动后执行,可使用${mysql_flags}连接数据库(如mysql $mysql_flags < dump.sql)。脚本中可使用以下变量:
$mysql_flags:连接本地mysqld的mysql工具参数。$MYSQL_RUNNING_AS_MASTER:容器以run-mysqld-master命令运行时定义。$MYSQL_RUNNING_AS_SLAVE:容器以run-mysqld-slave命令运行时定义。$MYSQL_DATADIR_FIRST_INIT:数据目录首次初始化时定义。通过扩展功能添加SSL证书和配置:
sslapp/mysql-certs/),存放证书文件(server-cert-selfsigned.pem、server-key.pem)。sslapp/mysql-cfg/ssl.cnf:ini[mysqld] ssl-key=${APP_DATA}/mysql-certs/server-key.pem ssl-cert=${APP_DATA}/mysql-certs/server-cert-selfsigned.pem
-v挂载目录或s2i构建新镜像。重要:升级前需备份所有数据。推荐通过
mysqldump导出数据,再导入新数据库;或启动新版本后立即运行mysql_upgrade(仅支持升级前一版本)。
通过MYSQL_DATADIR_ACTION变量控制数据目录升级行为,支持多个值(逗号分隔):
upgrade-warn(默认):检测到数据版本与当前版本不同时打印警告,仍启动容器;若mysql_upgrade_info文件不存在则创建,但不执行mysql_upgrade。upgrade-auto:数据来自前一版本时自动运行mysql_upgrade;来自更早/更新版本时打印警告。upgrade-force:无论数据版本,强制运行mysql_upgrade --force,可创建缺失的mysql_upgrade_info文件。optimize:运行mysqlcheck --optimize优化所有表。analyze:运行mysqlcheck --analyze分析所有表。disable:不执行数据版本相关操作。通过MYSQL_BINLOG_FORMAT环境变量设置binlog格式,支持row(行级)和statement(语句级,默认)。例如:
bashdocker run -e MYSQL_BINLOG_FORMAT=row ...
当容器以run-mysqld-master命令运行时,binlog将按指定格式记录变更。
mysqld守护进程日志输出到标准输出,可通过以下命令查看容器日志:
bashdocker logs <容器名称或ID>
镜像的Dockerfile及源码位于:https://github.com/sclorg/mariadb-container%E3%80%82%E5%85%B6%E4%B8%AD%EF%BC%8CCentOS%E5%AF%B9%E5%BA%94%60Dockerfile%60%EF%BC%8CRHEL7%E5%AF%B9%E5%BA%94%60Dockerfile.rhel7%60%EF%BC%8CRHEL8%E5%AF%B9%E5%BA%94%60Dockerfile.rhel8%60%EF%BC%8CFedora%E5%AF%B9%E5%BA%94%60Dockerfile.fedora%60%E3%80%82
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 标签列表页面。
来自真实用户的反馈,见证轩辕镜像的优质服务