本容器镜像包含适用于OpenShift和通用场景的MariaDB 10.2 SQL数据库服务器。用户可选择基于RHEL、CentOS或Fedora的镜像:RHEL镜像可在Red Hat Container Catalog获取,CentOS镜像在Docker Hub,Fedora镜像在Fedora Registry。生成的镜像可使用podman运行。
注意:本文档示例中使用
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_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构建策略或独立的source-to-image(s2i)工具扩展镜像。以rhscl/mariadb-102-rhel7镜像(OpenShift中标签为mariadb:10.2)为例:
构建自定义镜像my-mariadb-rhel7,配置来自GitHub仓库:
bashoc new-app mariadb:10.2~[***] \ --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 [***] 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及源码位于:[***]Dockerfile,RHEL7对应Dockerfile.rhel7,RHEL8对应Dockerfile.rhel8,Fedora对应Dockerfile.fedora。

来自真实用户的反馈,见证轩辕镜像的优质服务
免费版仅支持 Docker Hub 加速,不承诺可用性和速度;专业版支持更多镜像源,保证可用性和稳定速度,提供优先客服响应。
免费版仅支持 docker.io;专业版支持 docker.io、gcr.io、ghcr.io、registry.k8s.io、nvcr.io、quay.io、mcr.microsoft.com、docker.elastic.co 等。
当返回 402 Payment Required 错误时,表示流量已耗尽,需要充值流量包以恢复服务。
通常由 Docker 版本过低导致,需要升级到 20.x 或更高版本以支持 V2 协议。
先检查 Docker 版本,版本过低则升级;版本正常则验证镜像信息是否正确。
使用 docker tag 命令为镜像打上新标签,去掉域名前缀,使镜像名称更简洁。
探索更多轩辕镜像的使用方法,找到最适合您系统的配置方式
通过 Docker 登录认证访问私有仓库
在 Linux 系统配置镜像加速服务
在 Docker Desktop 配置镜像加速
Docker Compose 项目配置加速
Kubernetes 集群配置 Containerd
在宝塔面板一键配置镜像加速
Synology 群晖 NAS 配置加速
飞牛 fnOS 系统配置镜像加速
极空间 NAS 系统配置加速服务
爱快 iKuai 路由系统配置加速
绿联 NAS 系统配置镜像加速
QNAP 威联通 NAS 配置加速
Podman 容器引擎配置加速
HPC 科学计算容器配置加速
ghcr、Quay、nvcr 等镜像仓库
无需登录使用专属域名加速
需要其他帮助?请查看我们的 常见问题 或 官方QQ群: 13763429