升级Ubuntu后Docker Compose报错:不允许额外属性name
Docker Compose配置修正与nginx-proxy适用性确认
一、配置修正方案
1. 核心错误修复(mysql-yo2c服务)
报错services.mysql-yo2c.volumes.0 Additional property name is not allowed源于volume类型挂载的语法错误:当type: volume时,不能同时指定name和source(source是bind挂载的专属参数,volume类型仅需引用已定义的命名卷)。根据你挂载本地目录到容器的需求,提供两种修正方式:
方式一:改为bind挂载(直接映射本地目录)
将mysql-yo2c的volumes配置修改为:
volumes: - type: bind source: /home/ubuntu/docker/data_yo2c target: /var/lib/mysql - /home/ubuntu/docker/configs/scripts/config:/bin/config
(移除多余的name字段,bind挂载无需通过name标识)
方式二:用命名卷绑定本地目录(规范Docker卷管理)
若想用Docker命名卷管理本地目录,需在compose文件末尾添加卷定义,并修改mysql-yo2c的挂载配置:
首先在文件末尾追加:
volumes: db_yo2c: driver: local driver_opts: o: bind type: none device: /home/ubuntu/docker/data_yo2c
然后修改mysql-yo2c的volumes:
volumes: - type: volume source: db_yo2c target: /var/lib/mysql - /home/ubuntu/docker/configs/scripts/config:/bin/config
2. 其他潜在问题检查
- nginx-proxy的bind挂载带name:配置中
type: bind同时指定name: common是合法的,用于多容器共享挂载定义,无需修改。 - Portainer镜像版本:
portainer/portainer为旧版镜像,建议替换为portainer/portainer-ce(社区版),但旧版仍可正常运行,不影响compose执行。 - links字段:
yo2c-com服务中的links在Docker Compose v3+中已被网络自动发现替代,可删除,保留也不会报错。
二、nginx-proxy适用性说明
- 当前用法完全有效:你通过
jwilder/nginx-proxy镜像配合VIRTUAL_HOST环境变量实现反向代理的方式,仍是该工具的标准用法,在Docker Compose v2(即docker compose命令)下完全兼容。 - 镜像更新建议:原
jwilder/nginx-proxy已迁移至nginx-proxy/nginx-proxy组织,后续更新会发布在新地址,建议更换镜像地址以获取最新维护。
内容的提问来源于stack exchange,提问作者Hugh Fuve
相关产品推荐
相关产品推荐

