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

Docker Compose报错:services.mysql不允许额外website属性如何解决

报错产生原因

YAML是缩进强敏感的配置格式,该报错核心触发原因是缩进层级错误:当前配置中website模块整体缩进量大于mysql节点,被解析器识别为mysql服务下的子属性,而Docker Compose规范中services.mysql节点下不存在website这个合法配置项,因此直接抛出属性不允许的报错。
除了核心缩进问题外,配置中还存在3处会导致后续启动失败的隐藏错误:

  • MySQL端口配置错误:MYSQL_TCP_PORT是MySQL容器内部环境变量,仅支持指定容器内监听端口,不能写3308:3306这种宿主机-容器端口映射格式,端口映射规则需要单独配置在服务的ports字段下。
  • 单词拼写错误:website服务下的环境变量配置项错写为enviroment(正确拼写为environment,少写了字母n),会导致站点服务无法读取到数据库连接的环境变量。
  • 空值逻辑风险:MYSQL_DBNAME配置为空值,若站点业务启动时需要指定连接的数据库名,会后续触发业务连接错误,建议根据实际需求补全。
修复步骤
  1. 调整website模块的整体缩进,将其左移到和mysql节点同级,同属services节点的子项。
  2. 修正MySQL端口配置:将MYSQL_TCP_PORT的值改为容器内监听端口3306,在mysql服务下新增ports字段,配置3308:3306的端口映射规则。
  3. 修正website服务下的环境变量配置项拼写,将错写的enviroment改为environment。
  4. 根据业务实际情况补全MYSQL_DBNAME的取值。
修复后完整可用配置
version: '3.8'
volumes:
  datafiles:
services:
  mysql:
    image: mysql:latest
    command: --default-authentication-plugin=mysql_native_password
    container_name: mysql_ecommerce
    environment:
      - MYSQL_ROOT_PASSWORD=12345
      - MYSQL_TCP_PORT=3306
    ports:
      - "3308:3306"
    volumes:
      - datafiles:/var/lib/mysql
    restart: always

  website:
    container_name: web_ecommerce
    build:
      context: .
      dockerfile: Dockerfile
    environment:
      - MYSQL_DBHOST=mysql
      - MYSQL_DBPORT=3306
      - MYSQL_DBUSER=root
      - MYSQL_DBPASS=12345
      - MYSQL_DBNAME= # 请替换为业务实际使用的数据库名
    ports:
      - "8082:80"
      - "8083:443"
    depends_on:
      - mysql
配置校验方法

修改完成后,在docker-compose.yml所在目录执行命令docker-compose config,如果命令执行后正常输出格式化后的完整配置内容,无报错信息,说明配置符合规范,可以执行docker-compose up -d正常启动服务。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 09:09:11