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

Docker Compose配置MYSQL_ALLOW_EMPTY_PASSWORD为true报无效类型错误

报错原因

YAML 语法规则中,未加引号的 true、false、yes、no 等值会被默认解析为布尔类型。新版 Docker Compose(v2 及之后版本,含当前集成在 Docker 引擎里的 compose 插件)对 environment 字段做了严格类型校验:环境变量在容器内本质都是字符串/数字/空值,不接受布尔类型直接传入,所以会抛出类型无效的错误。
你看到的公开示例里写 true 能正常运行,基本分两种情况:

  • 示例用的是2022年之前的旧版 docker-compose v1,该版本校验逻辑宽松,会自动把布尔值转成字符串传入容器,不会拦截报错
  • 示例实际用了 environment 的数组写法,等号后的值不会被YAML解析为布尔类型
    另外你贴出的配置里 environment 字段缩进和上层字段不对齐,实际运行时也可能触发缩进相关的解析错误,修正配置时需要一并调整。
修复方案

三种常用修复方式任选即可,MySQL 官方镜像都能正确识别:

  • 给 true 加引号,强制解析为字符串,这是最通用的写法
  • 用数字 1 代替布尔值,符合 Compose 允许的数字类型要求,镜像也能识别为启用开关
  • 把 environment 从键值对写法改成数组写法,等号后的值会被直接按字符串处理,不会触发布尔类型解析

修正后的完整可用配置(以加引号的写法为例):

version: '3.8'
services:
  db:
    image: mysql
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: db
      MYSQL_ALLOW_EMPTY_PASSWORD: "true"

如果用数组写法的话,environment段改成下面的格式也可以:

environment:
  - MYSQL_DATABASE=db
  - MYSQL_ALLOW_EMPTY_PASSWORD=true

注意:端口值建议也加上引号,避免部分特殊端口号被YAML解析为非字符串类型触发隐式转换问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:09:22