You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL Docker容器中ROOT密码未生效,生成空密码问题求助

问题:MySQL容器root账户被设为空密码的原因

环境与操作

Docker Compose配置

version: '3.9'

services:
  mysql_db:
    container_name: mysql_db
    image: mysql
    volumes:
      - mysql_data:/var/lib/mysql
      - ./my.cnf:/etc/my.cnf
    environment:
      - MYSQL_ROOT_PASSWORD=pass

volumes:
  mysql_data:
    name: mysql_data

操作日志

命名卷mysql_data初始不存在,以root用户执行docker compose up -d启动容器后,日志显示root账户为空密码:

root@grafana:~/mysql# docker compose up -d
[+] Running 3/3
 ⠿ Network mysql_default  Created                                                                                           0.1s
 ⠿ Volume "mysql_data"    Created                                                                                           0.0s
 ⠿ Container mysql_db     Started                                                                                           0.7s
root@grafana:~/mysql# docker logs mysql_db
2022-09-16 09:47:19+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2022-09-16 09:47:19+00:00 [Note] [Entrypoint]: Switching to dedicated user 'mysql'
2022-09-16 09:47:19+00:00 [Note] [Entrypoint]: Entrypoint script for MySQL Server 8.0.30-1.el8 started.
2022-09-16 09:47:20+00:00 [Note] [Entrypoint]: Initializing database files
2022-09-16T09:47:20.072562Z 0 [Warning] [MY-011068] [Server] The syntax '--skip-host-cache' is deprecated and will be removed in a future release. Please use SET GLOBAL host_cache_size=0 instead.
2022-09-16T09:47:20.072669Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.30) initializing of server in progress as process 80
2022-09-16T09:47:20.081991Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2022-09-16T09:47:20.675144Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2022-09-16T09:47:22.257058Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.

原因分析

问题出在你挂载的自定义my.cnf文件上:

  • MySQL官方镜像的入口脚本在初始化数据库时,会优先读取/etc/my.cnf中的配置参数。如果你的./my.cnf里包含了--initialize-insecure或者等价配置,MySQL会直接跳过MYSQL_ROOT_PASSWORD环境变量的设置,创建无密码的root账户。
  • 也有可能是my.cnf中的其他配置干扰了入口脚本的逻辑,导致脚本未正确应用环境变量里的密码设置。

解决办法

  1. 检查本地./my.cnf文件,确认是否存在initialize-insecure这类会强制无密码初始化的参数,如有则删除。
  2. 暂时移除./my.cnf的挂载配置,执行docker compose down -v删除现有卷后重新启动容器,验证MYSQL_ROOT_PASSWORD是否正常生效。
  3. 若需自定义my.cnf,确保配置内容不与镜像初始化逻辑冲突,避免添加覆盖密码设置的参数。

内容的提问来源于stack exchange,提问作者moth

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 12:01:04