首页 > 解决方案 > docker compose 将两个服务组合为组

问题描述

我是 Docker 组合的新手,正在寻找一种同时扩展两个服务并为每个副本设置环境的方法。

我想要实现的这个 docker-compose 示例

version: '3'

networks:
  my-network:
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/16

services:
  my-service:
    image: service:latest
    networks:
      - my-network
  my-client:
    image: client:latest
    depends_on:
      - my-service
    networks:
      - my-network
    environment:
      SERVICE_IP: "my-service:1234"

当我运行它时docker-compose -f docker-compose.test.yml up一切正常。

现在我想扩展这两种服务,使每个服务my-client都有一个独特的 my-service,我试着做docker-compose -f docker-compose.test.yml up --scale my-service=10 --scale my-client=10

发生的事情是一些my-client具有相同的my-serviceIP,因为SERVICE_IP: "my-service:1234"并且没有将IP唯一地分配为一对一。这让一些人my-service没有任何客户,而一些人my-service却有很多客户。

我目前的解决方法

由于 docker compose create services when scale 具有像<service_name> # 这样的名称,我尝试为每个服务进行反向 DNS 查找my-client以匹配一个my-service

version: '3'

networks:
  my-network:
    ipam:
      driver: default
      config:
        - subnet: 172.20.0.0/16

services:
  my-service:
    image: service:latest
    networks:
      - my-network
  my-client:
    image: client:latest
    depends_on:
      - my-service
    networks:
      - my-network
    command: sh -c "export MY_IP=$$(ifconfig | grep '172.20' | awk '{print $$2}' | cut -d ':' -f2) && export MY_SERVICE=$$(host $$MY_IP | awk '{print $$5}' | cut -d '.' -f1 | sed 's/my-client/my-serivce/g') && export SERVICE_IP=$$MY_SERVICE:1234 && my-client

我使用反向 DNS删除SERVICE_IP: "my-service:1234"并获取了域名,然后将域中的my-client替换为my-service,这将为一项服务映射一个客户端。my-client

灵感来自:https ://stackoverflow.com/a/64790547/14053770

TL;TR

我想为环境分配一个服务名称、容器名称……可以作为一对一的组唯一地扩展,而无需这种解决方法。

标签: dockerdocker-composescaleenvironment

解决方案


推荐阅读