【问题标题】:`sudo` with command substitution带有命令替换的`sudo`
【发布时间】:2019-04-08 12:47:50
【问题描述】:

我正在使用需要sudo 来执行大多数docker 命令的远程计算机。我经常需要执行多个重复命令来停止 docker 容器等:sudo docker stop <container_name>

通常,我会使用 docker stop $(docker ps -q) 来停止 docker ps -q 的所有结果,但简单地用 sudo 作为前缀并不能满足我的要求:sudo docker stop $(docker ps -q) 导致权限被拒绝错误。

有没有办法通过 sudo 进行管道传输,这样我就不必单独停止所有内容?

【问题讨论】:

  • 原因是 Docker 作为守护进程运行,它们大多以特权运行。如果您需要以其他用户身份执行此操作;您需要授予该用户权限才能这样做。 Docker 好心地记录了 docs.docker.com/install/linux/linux-postinstall

标签: linux bash docker


【解决方案1】:

您还需要在内部命令中指定 sudo`。所以以下应该工作:

sudo docker stop $(sudo docker ps -q)

【讨论】:

    【解决方案2】:

    xargs 也应该可以工作:

    $ sudo docker ps -q | xargs sudo docker stop
    

    【讨论】: