如何避免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
相关产品推荐
相关产品推荐

