【问题标题】:How do I restart all docker containers with a pause between each restart?如何重新启动所有 docker 容器并在每次重新启动之间暂停?
【发布时间】:2018-10-24 08:54:02
【问题描述】:

我想在每个 restart 之间的这一个衬垫中暂停一下(也许只是 sleep?),因为这台服务器上有很多容器,让它减慢重启速度意味着更少负载尖峰。如果可能的话,我想把它放在一个衬里,并避免将它放入 bash shell 脚本文件中。我知道如何将sleep 放入 bash 脚本中的 for 循环中,但我不知道如何将其放入其中。 $() 部分叫什么?

docker restart $(docker ps --format "{{.Names}}" | grep -v somename)

所以我只想列出正在运行的容器,然后重新启动每个容器,每次重新启动之间可能会暂停 30 秒。

【问题讨论】:

标签: bash docker sleep restart


【解决方案1】:

$()按照here的含义是:

语法是令牌级别的,因此美元符号的含义取决于它所在的令牌。表达式 $(command) 是 command 的现代同义词,代表命令替换;这意味着,运行命令并将其输出放在这里。

您需要执行所有重新启动然后暂停是在$(docker ps --format "{{.Names}}" | grep -v somename)" 命令中的行上循环,并在循环内执行docker restart $line,然后执行sleep 30(30 秒)命令.

类似这样的:

items=$(docker ps --format "{{.Names}}" | grep -v somename)
for word in items
do
    docker restart $word
    sleep 30
done

解释:

items=$(docker ps --format "{{.Names}}" | grep -v somename)

这一行设置了一个名为 items 的字符串变量,其中包含用空格分隔的所有容器名称,就像您在原始命令中所做的那样。

for word in items

自动按空格分割字符串,在for 循环的每次迭代中为您提供不同的容器名称。

之间

do

done

我们有与items 字符串中的每个单词一起执行的代码,如下所示

    docker restart $world

我们像您一样重新启动 docker 容器,但仅针对其中一个容器,其名称从 $word 读取。

    sleep 30

我们休眠 30 秒,然后再次迭代下一个 $word 值。


单行版本

如果您想要一个可以作为单行运行的紧凑版本,您可以这样做:

items=$(docker ps --format "{{.Names}}" | grep -v somename);for word in items; do;  docker restart $word; sleep 30; done;

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 1970-01-01
    • 2016-09-29
    • 1970-01-01
    • 2018-05-16
    • 1970-01-01
    • 2015-09-30
    • 2019-11-01
    • 1970-01-01
    相关资源
    最近更新 更多