
dpvduncan/mariadbMariaDB是一款开源的关系型数据库管理系统(RDBMS),由MySQL原开发团队创建,旨在保持与MySQL的高度兼容性,同时提供更优的性能、安全性和功能扩展。MariaDB Docker镜像将MariaDB数据库封装为容器,简化了部署流程,支持快速搭建独立的数据库环境,适用于开发、测试及生产场景的数据存储与管理需求。
通过以下命令快速启动MariaDB容器:
bashdocker run -d \ --name mariadb \ -p 3306:3306 \ -e MARIADB_ROOT_PASSWORD=mysecretpassword \ -v mariadb-data:/var/lib/mysql \ mariadb:latest
-d:后台运行容器--name mariadb:指定容器名称-p 3306:3306:映射容器3306端口到主机(数据库默认端口)-e MARIADB_ROOT_PASSWORD:设置root用户密码(必填)-v mariadb-data:/var/lib/mysql:使用命名卷持久化数据(避免容器删除后数据丢失)MariaDB镜像支持通过环境变量自定义配置,常用变量如下:
| 环境变量 | 描述 | 示例值 |
|---|---|---|
MARIADB_ROOT_PASSWORD | 设置root用户密码(必填) | mysecretpassword |
MARIADB_DATABASE | 启动时自动创建的数据库名称 | mydb |
MARIADB_USER | 为新数据库创建的用户名称 | appuser |
MARIADB_PASSWORD | 新用户的密码 | apppass |
MARIADB_ALLOW_EMPTY_ROOT_PASSWORD | 允许root用户无密码(仅开发环境) | yes |
MARIADB_ROOT_HOST | 允许root用户从指定主机登录 | %(允许所有主机) |
MARIADB_INITDB_SKIP_TZINFO | 跳过时区表初始化(加速启动) | 1 |
示例:创建带初始数据库和用户的容器
bashdocker run -d \ --name mariadb-app \ -p 3306:3306 \ -e MARIADB_ROOT_PASSWORD=rootpass \ -e MARIADB_DATABASE=mydb \ -e MARIADB_USER=appuser \ -e MARIADB_PASSWORD=apppass \ -v mariadb-data:/var/lib/mysql \ mariadb:latest
使用docker-compose.yml简化多容器应用中的数据库部署:
yamlversion: '3.8' services: mariadb: image: mariadb:latest container_name: mariadb restart: always # 容器退出时自动重启 ports: - "3306:3306" environment: MARIADB_ROOT_PASSWORD: rootpass MARIADB_DATABASE: mydb MARIADB_USER: appuser MARIADB_PASSWORD: apppass volumes: - mariadb-data:/var/lib/mysql # 数据持久化 - ./init-scripts:/docker-entrypoint-initdb.d # 初始化脚本目录(可选) networks: - app-network # 与应用共享网络 volumes: mariadb-data: # 命名卷,数据持久化 networks: app-network: driver: bridge
将SQL脚本(.sql、.sql.gz)或Shell脚本(.sh)放入./init-scripts目录,容器启动时会自动执行,用于初始化表结构、插入测试数据等。
为避免容器删除导致数据丢失,需通过以下方式持久化数据:
命名卷(推荐):如上述示例中使用-v mariadb-data:/var/lib/mysql,卷由Docker管理,安全性高。
主机目录挂载:将主机目录直接挂载到容器,适合需要直接访问数据文件的场景:
bashdocker run -d \ --name mariadb \ -v /path/on/host/mysql-data:/var/lib/mysql \ mariadb:latest
连接到容器内数据库:
bashdocker exec -it mariadb mysql -u root -p
从其他容器连接:通过容器名称或服务名(Docker Compose)访问,例如在应用容器中连接字符串为:
mysql://appuser:apppass@mariadb:3306/mydb
限制外部访问:生产环境建议不暴露3306端口到公网,通过Docker网络隔离,仅允许应用容器访问。
容器日志默认输出到标准输出,可通过Docker日志驱动配置存储位置:
bashdocker run -d \ --name mariadb \ --log-driver=json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ mariadb:latest
或在docker-compose.yml中配置:
yamlservices: mariadb: # ...其他配置 logging: driver: "json-file" options: max-size: "10m" max-file: "3"
MariaDB镜像提供多个标签,对应不同版本,可根据需求选择:
latest:最新稳定版11.4:特定主版本(如11.4.x系列)11.4.2:特定补丁版本11.4-focal:基于Ubuntu Focal的版本11.4-alpine:基于Alpine Linux的轻量版本(体积更小,适合资源受限环境)建议生产环境使用特定版本标签(如11.4.2),避免latest标签自动更新导致兼容性问题。
MARIADB_ROOT_PASSWORD,并使用强密码。MARIADB_ROOT_HOST限制仅允许特定IP或主机登录。docker exec mariadb mysqldump或mariabackup备份数据。appuser)访问数据库,避免权限过大。
manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务