我尝试使用 docker compose 启动 mysql 容器,但收到错误 未知变量 'default-authentication-plugin=mysql_native_password'。
我的 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_AUTHENTICATION_PLUGIN: mysql_native_password
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
在我的.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'
我到处搜索,但没有找到解决我问题的方法。如果有人有解决方案请。
提前致谢
我尝试过更改mysql的镜像版本,但没有成功。如果我将版本降级到 5.7 并更改卷名称,则可以正常工作。但我想升级mysql版本。
mysql 8.4 中没有 default-authentication-plugin 参数,您可以通过 --mysql-native-password 获取所有 mysqld 参数和描述,如下所示
mysqld --verbose --help
...
--mysql-native-password[=name]
Enable or disable mysql_native_password plugin. Possible
values are ON, OFF, FORCE (don't start if the plugin
fails to load).
...
因此,对于您的 docker-compose.yml,请将行从
更改为 command: ["mysqld", "--default-authentication-plugin=mysql_native_password"]
到
command: ["mysqld", "--mysql-native-password=ON"]
并在 my.cnf 中注释掉 default-authentication-plugin
[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'
然后再次尝试重新启动容器,它应该可以工作。