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中的其他配置干扰了入口脚本的逻辑,导致脚本未正确应用环境变量里的密码设置。
解决办法
- 检查本地
./my.cnf文件,确认是否存在initialize-insecure这类会强制无密码初始化的参数,如有则删除。 - 暂时移除
./my.cnf的挂载配置,执行docker compose down -v删除现有卷后重新启动容器,验证MYSQL_ROOT_PASSWORD是否正常生效。 - 若需自定义
my.cnf,确保配置内容不与镜像初始化逻辑冲突,避免添加覆盖密码设置的参数。
内容的提问来源于stack exchange,提问作者moth
相关产品推荐
相关产品推荐

