Docker Compose部署MySQL8:如何同时设置mysql_native_password与清空sql_mode
解决Docker Compose配置MySQL8同时启用mysql_native_password与自定义sql_mode的问题
正确配置方案
方案1:直接通过command传递参数
使用YAML多行或数组形式传递参数,注意不要给sql_mode的值加多余引号,避免解析错误:
services: mysql: image: mysql:8.0 command: --default-authentication-plugin=mysql_native_password --sql_mode=NO_ENGINE_SUBSTITUTION # 补充你的环境变量、端口等配置 environment: MYSQL_ROOT_PASSWORD: your_password
或者写成紧凑数组形式:
command: ["--default-authentication-plugin=mysql_native_password", "--sql_mode=NO_ENGINE_SUBSTITUTION"]
方案2:使用自定义配置文件(推荐,更稳定)
创建my.cnf配置文件,写入需要的参数:
[mysqld] default-authentication-plugin=mysql_native_password sql_mode=NO_ENGINE_SUBSTITUTION
在Docker Compose中挂载该文件到MySQL的自定义配置目录:
services: mysql: image: mysql:8.0 volumes: - ./my.cnf:/etc/mysql/conf.d/my.cnf environment: MYSQL_ROOT_PASSWORD: your_password
你之前的方案失败原因
- bash命令组合方式错误:
bash -c后需要执行完整的mysqld启动命令,而非直接写参数,你之前的写法相当于让bash执行两个参数作为命令,无法正常启动MySQL。 - 数组形式语法错误:你写的
--sql_mode='NO_ENGINE_SUBSTITUTION缺少闭合单引号,且多余的单引号会被MySQL当作参数值的一部分,导致sql_mode配置无效。
内容的提问来源于stack exchange,提问作者jimlongo
相关产品推荐
相关产品推荐

