簡體   English   中英

如何在復制的 docker-compose 服務的所有容器上運行 shell 命令?

[英]How to run a shell command on all containers of a replicated docker-compose service?

我正在使用 docker 運行 spark 工作人員,使用 docker-compose 設置進行復制:

version: '2'

services:
  spark-worker:
    image: bitnami/spark:latest
    environment:
      - SPARK_MODE=worker
      - SPARK_MASTER_URL=spark://1.1.1.1:7077
    deploy:
      mode: replicated
      replicas: 4

例如,當我運行docker-compose exec spark-worker ls時,它通常只在第一個副本上運行。 有沒有辦法將這些命令廣播到所有副本?

docker-compose version 1.29.2, build 5becea4c

Docker version 20.10.7, build f0df350

對此沒有內置工具,但您可以相當容易地構建一些東西。 例如:

docker ps -q --filter label=com.docker.compose.service=spark-worker |
xargs -ICID docker exec CID ls

我會提出一個比@larsks 提出的更簡單的命令,它利用docker-compose命令本身。

SERVICE_NAME=spark-worker
for id in $(docker-compose ps -q $SERVICE_NAME); do
    docker exec -t $id "echo" "hello"
done;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM