The problem of docker-compose creating redis cluster

  docker, question

The last step in creating a redis cluster with docker-compose is to use redis-cli to connect the started redis nodes in series. However, redis-cli –cluster create has an interactive process (you need to enter “yes”), and you want to ask how to complete the whole operation in docker-compose
Redis-cli service configuration in compose:

redis-cli:
 image: redis:5.0.1-alpine
 depends_on:
 - redis1
 - redis2
 - redis3
 - redis4
 - redis5
 - redis6
 links:
 - redis1
 - redis2
 - redis3
 - redis4
 - redis5
 - redis6
 entrypoint:
 - redis-cli
 - --cluster
 - create
 - redis1:${client_port}
 - redis2:${client_port}
 - redis3:${client_port}
 - redis4:${client_port}
 - redis5:${client_port}
 - redis6:${client_port}
 - --cluster-replicas
 - '1'
 - -a
 - ${client_pwd}

Then there is the interactive prompt after startup:

Attaching to redis-cluster_redis-cli_1_99db7133d585
 redis-cli_1_99db7133d585 | Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
 redis-cli_1_99db7133d585 | >>> Performing hash slots allocation on 6 nodes  ...
 redis-cli_1_99db7133d585 | Master[0] -> Slots 0 - 5460
 redis-cli_1_99db7133d585 | Master[1] -> Slots 5461 - 10922
 redis-cli_1_99db7133d585 | Master[2] -> Slots 10923 - 16383
 redis-cli_1_99db7133d585 | Adding replica redis4:6379 to redis1:6379
 redis-cli_1_99db7133d585 | Adding replica redis5:6379 to redis2:6379
 redis-cli_1_99db7133d585 | Adding replica redis6:6379 to redis3:6379
 redis-cli_1_99db7133d585 | M: 3193369a87bdd75dec82dae302bfc703962b029f redis1:6379
 redis-cli_1_99db7133d585 |    slots:[0-5460] (5461 slots) master
 redis-cli_1_99db7133d585 | M: a9085988e16f91ecb4ac37e39fb360b90f5f16bc redis2:6379
 redis-cli_1_99db7133d585 |    slots:[5461-10922] (5462 slots) master
 redis-cli_1_99db7133d585 | M: 3e71facdb786284e5b4c65e396c72a1a2e08aff8 redis3:6379
 redis-cli_1_99db7133d585 |    slots:[10923-16383] (5461 slots) master
 redis-cli_1_99db7133d585 | S: 0c8070d7dc8cd6288a7cd4495fb860a4190b0f54 redis4:6379
 redis-cli_1_99db7133d585 |    replicates 3193369a87bdd75dec82dae302bfc703962b029f
 redis-cli_1_99db7133d585 | S: 8aa17809f2e74f8bb91ac0e5d14aa810036ccde7 redis5:6379
 redis-cli_1_99db7133d585 |    replicates a9085988e16f91ecb4ac37e39fb360b90f5f16bc
 redis-cli_1_99db7133d585 | S: 3fed12ec7f67d6cd14b873155d3d956c0317bf39 redis6:6379
 redis-cli_1_99db7133d585 |    replicates 3e71facdb786284e5b4c65e396c72a1a2e08aff8
 redis-cli_1_99db7133d585 | Can I set the above configuration?  (type 'yes' to accept): redis-cluster_redis-cli_1_99db7133d585 exited with code 0

Finally, you need to interactively enter a yes, and the result container exits.

#!  /bin/sh
 
 echo "yes" | redis-cli --cluster create `ping redis1 -c1 | sed '1{s/[^(]*(//;  s/).*//;  q}'`:$CLIENT_PORT \
 `ping redis2 -c1 | sed '1{s/[^(]*(//;  s/).*//;  q}'`:$CLIENT_PORT \
 `ping redis3 -c1 | sed '1{s/[^(]*(//;  s/).*//;  q}'`:$CLIENT_PORT \
 `ping redis4 -c1 | sed '1{s/[^(]*(//;  s/).*//;  q}'`:$CLIENT_PORT \
 `ping redis5 -c1 | sed '1{s/[^(]*(//;  s/).*//;  q}'`:$CLIENT_PORT \
 `ping redis6 -c1 | sed '1{s/[^(]*(//;  s/).*//;  q}'`:$CLIENT_PORT \
 --cluster-replicas "1" -a $CLIENT_PWD
 tail -f /dev/null