所以,我有以下命令
$(docker container ls -a -q) | docker container stop
停止我所有的 docker 容器,效果很好!除非我刚刚清除了所有容器:
"docker container stop" requires at least 1 argument.
See 'docker container stop --help'.
Usage: docker container stop [OPTIONS] CONTAINER [CONTAINER...]
Stop one or more running containers
有什么方法可以防止使用单行命令显示此错误消息?
注意:我原来的命令实际上是docker container stop $(docker container ls -a -q)
,它给出了相同的错误消息,但我认为使用管道/链接一个命令到另一个命令来描述我的问题会更容易。这两个命令的答案都可以,但我更喜欢使用docker container stop $(docker container ls -a -q)
答案1
由于 Docker 的 N 元停止操作对于零个容器来说是愚蠢的,因此您可以将其视为docker stop container
仅需要一个参数的一元操作,并对该一元操作进行自己的术语列表分配。当然,您的逻辑可以这样处理空术语序列:
for x in $(docker container ls -a -q); do docker container stop $x; done
如果$(docker ...)
没有产生任何结果,则循环不会执行。
答案2
您可以使用重定向来静默 shell 输出,请参阅此文章了解更多详细信息:https://stackoverflow.com/questions/2292847/how-to-silence-output-in-a-bash-script
我可能会使用更像这样的东西来处理响应,这样我仍然可以获得输出。
docker container stop $(docker container ls -a -q) >/dev/null 2>&1 || echo "Nothing to stop."