docker - 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-service
IP,因为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
我想为环境分配一个服务名称、容器名称……可以作为一对一的组唯一地扩展,而无需这种解决方法。
解决方案
推荐阅读
- c# - 超时重试消息
- ios - 如何使用 SwiftUI 沿圆形路径绘制文本
- bootstrap-4 - 自定义引导容器宽度以及列的正确方法
- .htaccess - 这三个 .htaccess 重定向的顺序是否重要?
- amazon-web-services - AWS CLI 用户数据脚本未运行
- image - .htaccess 代码强制 twitterbot 使用 http 而不是 https
- c# - MYSQL AES_DECRYPT 函数与 heidiSQL 一起工作,但是当我在我的 C# 程序中运行相同的查询时,总是返回 DBNULL
- javascript - 我正在使用单选按钮创建一个多项选择题考试项目
- python - 如何在pyspark中使用nestes数组将数据框转换为dict
- java - 我们可以用 ArrayDeque 替换 ArrayList 以获得更好的性能吗?