使用 docker-composer 缩放并在主机名后附加一个数字?
Scaling with docker-composer and appending a number to the hostname?
我有一个 docker-compose.yml
:
master:
build: .
slave:
image: master
hostname: slave
command: run_slave
如何让 docker-compose scale slave=5
生成具有唯一主机名的机器?
...例如像这样:
slave1
slave2
slave3
slave4
slave5
无法将主机名设置为该值。
如果您需要唯一标识符,我会使用唯一容器 ID,您可以通过 运行 $(hostname)
.
获得
接受的答案是正确的,无法使用一个 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
我有一个 docker-compose.yml
:
master:
build: .
slave:
image: master
hostname: slave
command: run_slave
如何让 docker-compose scale slave=5
生成具有唯一主机名的机器?
...例如像这样:
slave1
slave2
slave3
slave4
slave5
无法将主机名设置为该值。
如果您需要唯一标识符,我会使用唯一容器 ID,您可以通过 运行 $(hostname)
.
接受的答案是正确的,无法使用一个 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