在一个服务连接到另一个服务的网络的场景中(如下面的示例.yml所示),有没有一种方法可以使用--scale来扩展这两个服务并使它们连接到正确的网络?
因为在app1中使用vpn1网络,app2使用vpn2网络等。
services:
vpn:
image: myvpn
app:
image: myapp
depends_on: vpn
network_mode: service:vpn我希望能够使用docker-compose up -d --scale app=5 --scale vpn=5运行容器
问题是,如果我以当前设置的方式扩展这两个容器(假设每个服务有两个实例以简化),两个"app“服务都连接到第一个"vpn”服务。
我可以通过检查app-1和app-2来确认这一点。在vpn中,它们都显示"NetworkMode": "container:ef37426bec3dbd9c182187d87faf5fe8c92c1e1fa26066f57d163f301af2574e",这是第一个vpn容器。
我知道这是预期的行为,因为.yml文件指示的是network_mode: service:vpn,而不是network_mode: service:vpn-${container ID here}
我想找到一种方法来设置app-1使用vpn-1作为NetworkMode,app-2使用vpn-2作为NetworkMode,等等。
发布于 2021-10-17 09:18:21
开箱即用的docker-compose允许两种通信方法:
docker

就我所做的研究而言,您所要求的配置只能通过一种方式使用docker-compose来实现,您可以通过容器名称在每个客户端服务中设置后端DNS名称。
例如,如果我想连接到第二个实例,我将连接到docker_backend_2

另一种需要更亲力亲为的方法是在服务之间进行对话,并决定哪个将连接到返回的IP中的谁到nslookup或一些其他探测方法
如果此连接配置对您很重要,您应该查看Kubernetes,其中您的基本工作单元是pod,并且您可以在每个pod中旋转多个容器镜像,然后您将在pod中旋转每个服务中的一个,并在pod的网络中直接连接到它们。
https://stackoverflow.com/questions/69598502
复制相似问题