如何重启所有 docker 容器并在每次重启之间暂停?
How do I restart all docker containers with a pause between each restart?
我想暂停一下(也许只是 sleep
以某种方式?)在每个 restart
之间的这个班轮中,因为此服务器上有很多容器并且速度变慢重新启动将意味着更少的负载峰值。如果可能的话,我想将其保留为一行,并避免将其放入 bash shell 脚本文件中。我知道如何将 sleep
放入 bash 脚本的 for 循环中,但我不知道如何将其放入其中。 $()
部分叫什么?
docker restart $(docker ps --format "{{.Names}}" | grep -v somename)
所以我只想列出 运行 个容器,并在每次重启之间暂停 30 秒重新启动每个容器。
根据here$()
的含义是:
The syntax is token-level, so the meaning of the dollar sign depends on the token it's in. The expression $(command) is a modern synonym for command
which stands for command substitution; it means, run command and put its output here.
执行所有重新启动然后暂停所需的是循环遍历 $(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;
我想暂停一下(也许只是 sleep
以某种方式?)在每个 restart
之间的这个班轮中,因为此服务器上有很多容器并且速度变慢重新启动将意味着更少的负载峰值。如果可能的话,我想将其保留为一行,并避免将其放入 bash shell 脚本文件中。我知道如何将 sleep
放入 bash 脚本的 for 循环中,但我不知道如何将其放入其中。 $()
部分叫什么?
docker restart $(docker ps --format "{{.Names}}" | grep -v somename)
所以我只想列出 运行 个容器,并在每次重启之间暂停 30 秒重新启动每个容器。
根据here$()
的含义是:
The syntax is token-level, so the meaning of the dollar sign depends on the token it's in. The expression $(command) is a modern synonym for
command
which stands for command substitution; it means, run command and put its output here.
执行所有重新启动然后暂停所需的是循环遍历 $(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;