MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),凭借开源特性、高效稳定的性能及良好的兼容性,被广泛应用于各类Web应用、企业级系统及数据存储场景,是全球最受欢迎的关系型数据库管理系统之一,为用户提供可靠的数据管理与处理支持,在数据存储、查询及维护等方面展现出优异的实用性与灵活性。
收藏数: 1.6万
下载次数: 4846775687
类型:

library/mysql由 Docker 社区及 MySQL 团队 维护。
可通过 Docker 社区 Slack、Server Fault、Unix & Linux 或 Stack Overflow 获取帮助。
9.4.0, 9.4, 9, innovation, latest, 9.4.0-oraclelinux9, 9.4-oraclelinux9, 9-oraclelinux9, innovation-oraclelinux9, oraclelinux9, 9.4.0-oracle, 9.4-oracle, 9-oracle, innovation-oracle, oracle8.4.6, 8.4, 8, lts, 8.4.6-oraclelinux9, 8.4-oraclelinux9, 8-oraclelinux9, lts-oraclelinux9, 8.4.6-oracle, 8.4-oracle, 8-oracle, lts-oracle8.0.43, 8.0, 8.0.43-oraclelinux9, 8.0-oraclelinux9, 8.0.43-oracle, 8.0-oracle8.0.43-bookworm, 8.0-bookworm, 8.0.43-debian, 8.0-debian[***]
amd64(详情)arm64v8(详情)repos/mysql/ 目录(历史记录)library/mysql 标签library/mysql 文件(历史记录)docs 仓库的 mysql/ 目录(历史记录)
MySQL 是全球最流行的开源数据库,以其可靠的性能和易用性成为 Web 应用的首选数据库,覆盖从个人项目、网站到电商平台、信息服务,乃至 、、、! 等大型网站。
更多信息及 MySQL 服务器和其他产品的下载,见 [***]
!MySQL logo
启动 MySQL 实例的基本命令:
console$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
some-mysql:容器名称(可自定义)-e MYSQL_ROOT_PASSWORD=my-secret-pw:设置 root 用户密码(必填)-d:后台运行容器mysql:tag:指定镜像标签(如 mysql:8.4,标签列表见上文)通过另一个容器连接到已启动的 some-mysql 实例:
console$ docker run -it --network some-network --rm mysql mysql -hsome-mysql -uexample-user -p
--network some-network:确保两个容器在同一网络(若未指定网络,需先创建并连接容器)--rm:退出后自动删除临时容器-hsome-mysql:目标 MySQL 容器的名称(或 IP)也可直接连接非 Docker 环境的远程 MySQL:
console$ docker run -it --rm mysql mysql -hsome.mysql.host -usome-mysql-user -p
更多 MySQL 命令行客户端用法见 官方文档。
以下是 compose.yaml 示例(以 root/example 为默认账号密码):
yamlservices: db: image: mysql restart: always environment: MYSQL_ROOT_PASSWORD: example # 注意:此配置仅为示例,不建议用于生产环境
启动命令:docker compose up,等待初始化完成后即可使用。
通过 docker exec 进入运行中的容器:
console$ docker exec -it some-mysql bash
通过 Docker 容器日志查看 MySQL 运行日志:
console$ docker logs some-mysql
/etc/my.cnf,可能包含 /etc/mysql/conf.d 目录的扩展配置/etc/mysql/my.cnf,可能包含 /etc/mysql/conf.d 目录的扩展配置建议先进入容器查看具体配置结构。
若自定义配置文件路径为 /my/custom/config-file.cnf,通过以下命令挂载配置目录:
console$ docker run --name some-mysql -v /my/custom:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
-v /my/custom:/etc/mysql/conf.d:将主机目录 /my/custom 挂载到容器的配置扩展目录可直接通过 mysqld 命令行参数自定义配置(无需配置文件)。例如,设置默认字符集为 utf8mb4:
console$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
查看所有可用参数:
console$ docker run -it --rm mysql:tag --verbose --help
启动容器时可通过 -e 设置以下环境变量(首次初始化数据库时生效,已有数据库时忽略):
MYSQL_ROOT_PASSWORD:设置 root 用户密码(必填,除非使用 MYSQL_ALLOW_EMPTY_PASSWORD 或 MYSQL_RANDOM_ROOT_PASSWORD)MYSQL_DATABASE:初始化时创建指定名称的数据库MYSQL_USER & MYSQL_PASSWORD:创建新用户并授予 MYSQL_DATABASE 的所有权限(需同时设置)MYSQL_ALLOW_EMPTY_PASSWORD:允许 root 密码为空(设为 yes,不推荐生产环境)MYSQL_RANDOM_ROOT_PASSWORD:生成随机 root 密码(设为 yes,密码会打印到日志)MYSQL_ONETIME_PASSWORD:强制 root 用户首次登录需修改密码(MySQL 5.6+ 支持,设为非空值)MYSQL_INITDB_SKIP_TZINFO:跳过时区数据加载(设为非空值,不影响 CONVERT_TZ() 函数时可用)通过环境变量后缀 _FILE 从文件加载值(适用于 Docker Secrets)。例如,从 /run/secrets/mysql-root 文件读取 root 密码:
console$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d mysql:tag
支持的变量:MYSQL_ROOT_PASSWORD_FILE、MYSQL_ROOT_HOST_FILE、MYSQL_DATABASE_FILE、MYSQL_USER_FILE、MYSQL_PASSWORD_FILE。
容器首次启动时,若数据库目录为空,会自动初始化数据库,并执行 /docker-entrypoint-initdb.d 目录下的 .sh、.sql、.sql.gz、.sql.bz2、.sql.xz、.sql.zst 文件(按字母顺序执行)。
将 SQL 脚本挂载到 /docker-entrypoint-initdb.d:
console$ docker run --name some-mysql -v /path/to/init.sql:/docker-entrypoint-initdb.d/init.sql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
SQL 文件会自动导入到 MYSQL_DATABASE 指定的数据库(未指定则导入到默认数据库)。
MySQL 数据默认存储在容器内的 /var/lib/mysql,建议通过以下方式持久化数据:
让 Docker 管理存储,数据保存在主机的 Docker 卷中(路径由 Docker 控制):
console$ docker run --name some-mysql -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
mysql-data:卷名称(首次使用会自动创建)将主机目录挂载到容器内的 /var/lib/mysql(需确保目录权限正确):
console$ mkdir -p /my/own/datadir $ docker run --name some-mysql -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
容器启动时若需初始化数据库(首次启动且数据目录为空),初始化期间无法接受连接。自动化工具(如 Docker Compose)同时启动多个容器时可能遇到此问题,建议在应用中添加连接重试逻辑(参考 WordPress 的实现)。
若挂载的 /var/lib/mysql 目录已包含数据库(如 /var/lib/mysql/mysql 子目录),无需设置 MYSQL_ROOT_PASSWORD,容器会直接使用现有数据库,忽略所有初始化环境变量。
若需指定 UID/GID 运行 mysqld(如适配主机目录权限),可通过 --user 参数设置(非 root 用户):
console$ mkdir data && chown 1000:1000 data # 主机目录权限设为 1000:1000 $ docker run -v "$PWD/data":/var/lib/mysql --user 1000:1000 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
通过 docker exec 在容器内执行 mysqldump:
console$ docker exec some-mysql sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /host/path/all-databases.sql
通过 docker exec -i 导入 SQL 文件:
console$ docker exec -i some-mysql sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /host/path/all-databases.sql
mysql/ 目录使用前请确保遵守所有包含软件的许可条款。
以下是 mysql 相关的常用 Docker 镜像,适用于 关系型数据库、事务处理、数据存储 等不同场景:
您可以使用以下命令拉取该镜像。请将 <标签> 替换为具体的标签版本。如需查看所有可用标签版本,请访问 版本下载页面。


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务