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

如何避免Docker Compose模板服务被启动?锚点语法是否正确?

问题解答

你的YAML锚点语法本身是正确的,问题出在你把模板配置放在了services节点下作为一个实际服务项——Docker Compose会加载services下的所有节点并启动对应服务,所以你的模板也被当成可运行服务启动了。

要解决这个问题,有两种规范的处理方式:

方案1:使用x-前缀的顶级扩展字段

Docker Compose会自动忽略所有以x-开头的顶级配置节点,你可以把模板放在这个独立区块里,既不影响服务加载,又能正常复用配置:

version: '3.8'
# 模板放在x-开头的顶级节点,不会被当作服务加载
x-backend: &backend
  image: ruby:3.2
  environment:
    - RAILS_ENV=production
  volumes:
    - ./app:/app

services:
  app:
    <<: *backend
    command: rails server
    ports:
      - "3000:3000"
  
  sidekiq:
    <<: *backend
    command: sidekiq

方案2:给模板服务加x-前缀(兼容写法)

如果一定要把模板放在services节点内,给服务名加上x-前缀,Docker Compose会跳过这个服务的启动流程:

version: '3.8'
services:
  # 加x-前缀,不会被启动
  x-backend: &backend
    image: ruby:3.2
    environment:
      - RAILS_ENV=production
    volumes:
      - ./app:/app

  app:
    <<: *backend
    command: rails server
    ports:
      - "3000:3000"
  
  sidekiq:
    <<: *backend
    command: sidekiq

优先推荐方案1,它更符合Docker Compose的扩展字段设计规范,配置结构也更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 14:35:54