使用docker-composer进行缩放并在主机名后附加数字?

时间:2016-01-28 13:10:23

标签: docker containers docker-compose

我有一个docker-compose.yml

master:
  build: .

slave:
  image: master
  hostname: slave
  command: run_slave

如何让docker-compose scale slave=5生成具有唯一主机名的计算机?

... e.g。像这样的东西:

slave1
slave2
slave3
slave4
slave5

2 个答案:

答案 0 :(得分:2)

接受的答案是正确的,没有办法使用一个scale命令设置它。这是解决问题的一种方法。

不是一次扩展奴隶,而是一次扩展一个奴隶,使用环境变量在每一步设置主机名。这确实打败了scale的便利性,但它似乎有效,至少在Compose 1.8.1中。

docker-compose.yml

master:
  build: .

slave:
  build: .
  hostname: slave${SLAVE_INDEX}
  command: run_slave

运行它们:

$ for i in $(seq 1 5); do SLAVE_INDEX=$i docker-compose scale slave=$i; done
Creating and starting so_slave_1 ... done
Creating and starting so_slave_2 ... done
Creating and starting so_slave_3 ... done
Creating and starting so_slave_4 ... done
Creating and starting so_slave_5 ... done

$ for i in $(docker ps --format  '{{ .Names }}'); do
> echo -n "$i: "; docker inspect --type container $i | jq -r '.[].Config.Hostname'
> done
so_slave_5: slave5
so_slave_4: slave4
so_slave_3: slave3
so_slave_2: slave2
so_slave_1: slave1

$ for i in $(seq 1 5); do docker exec -it so_slave_${i} hostname; done
slave1
slave2
slave3
slave4
slave5

答案 1 :(得分:1)

无法将主机名设置为该值。

如果您需要唯一标识符,我会使用唯一的容器ID,您可以通过运行$(hostname)来获取该标识符。