我正在使用 Docker Compose(版本3.3),我有一组如下所示的服务。
version: '3.3'
services:
jboss:
build:
context: .
dockerfile: jboss/Dockerfile
ports:
- 8080
depends_on:
- mysql
- elasticsearch
networks:
- ${NETWORK}
# - front-tier
# - back-tier
mysql:
hostname: mysql
image: mysql:latest
ports:
- 3306
networks:
- ${NETWORK}
# - back-tier
elasticsearch:
image: elasticsearch:1.7.3
ports:
- 9200
networks:
- ${NETWORK}
# - back-tier
networks:
# front-tier:
# driver: bridge
问题/问题与当我在一种子网中扩展我的容器时隔离这些服务的可能性有关(顺便说一下,我这里没有使用swarm),意思是jboss1只能看到mysql1和elasticsearch1。对于jboss2- mysql2- es2等也是如此。我知道这很奇怪,但任务是并行一些测试,它们必须完全隔离。
您可能已经注意到,我尝试了一些方法(在compose中有注释)来定义一些网络,但如果我扩展容器,它们显然将在同一个网络上 - 这意味着我可以从jboss-1随机ping到mysql-n。
然后,我尝试了另一种方法,Arun Gupta在http://blog.arungupta.me/docker-bridge-overlay-network-compose-variable-substitution/中解释了这种方法,他提到了网络属性中的变量替换(因为其中${NETWORK})。但结果是,如果我尝试通过以下方式启动我的容器:
NETWORK=isolated-net1 docker-compose up -d
然后
NETWORK=isolated-net2 docker-compose up -d
它不会对容器进行缩放,而是重新创建所有容器:
Recreating docker_mysql_1 ...
Recreating docker_elasticsearch_1 ...
Recreating docker_jboss_1 ...
简而言之:在执行
docker-compose up --scale
时,是否有办法隔离一组服务?谢谢。