如何重新启动所有Docker容器并在每次重新启动之间有一个暂停?

时间:2018-10-24 00:02:41

标签: bash docker sleep restart

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

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

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

1 个答案:

答案 0 :(得分:1)

overload of CreateInstance$()的含义是:

  

语法是令牌级别的,因此美元符号的含义取决于其所在的令牌。表达式$(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;