使用Docker Compose启动MySQL 8.4容器遇unknown variable错误求助
解决MySQL 8.4容器启动报错:unknown variable 'default-authentication-plugin=mysql_native_password'
错误原因
MySQL 8.0.34及后续版本(含8.4)已移除default-authentication-plugin(横杠分隔)配置项,替换为default_authentication_plugin(下划线分隔)。同时你的配置存在重复设置、拼写错误,导致容器启动失败。
修正步骤
1. 调整docker-compose.yml配置
替换参数名、移除无效环境变量、修复拼写错误:
db: image: mysql:8.4 command: ["mysqld", "--default_authentication_plugin=mysql_native_password"] restart: unless-stopped ports: - 3306:3306 environment: MYSQL_RANDOM_ROOT_PASSWORD: yes MYSQL_DATABASE: ${MYSQL_DATABASE:-learn} MYSQL_USER: ${MYSQL_USER:-learn} MYSQL_PASSWORD: ${MYSQL_PASSWORD:-test2024} volumes: - mysql_dev:/var/lib/mysql - ./docker/laravel/config/mysql/my.cnf:/etc/mysql/conf.d/my.cnf healthcheck: test: [ "CMD", 'mysqladmin', 'ping', '-h', 'localhost', '-u', '$$MYSQL_USER', '-p$$MYSQL_PASSWORD' ] timeout: 20s retries: 2
说明:移除了无效的MYSQL_AUTHENTICATION_PLUGIN环境变量,修复了healthcheck中$$MYSQl_USER的拼写错误(小写l改为大写L)。
2. 修改my.cnf配置
将横杠分隔的参数替换为下划线格式:
[mysqld] mysql_native_password=ON default_authentication_plugin=mysql_native_password general_log = 0 general_log_file = /var/lib/mysql/general.log default_time_zone='+00:00'
3. 清理旧数据卷(可选)
如果之前用过旧版本MySQL的数据卷,可能存在兼容性残留,执行以下命令重置:
docker-compose down -v docker-compose up -d
验证
容器启动后,进入容器确认默认认证插件:
docker exec -it <容器名> mysql -u root -p # 输入随机生成的root密码后执行 SELECT @@default_authentication_plugin;
返回结果应为mysql_native_password。
内容的提问来源于stack exchange,提问作者songcraft
相关产品推荐
相关产品推荐

