简体   繁体   English

在docker命令中使用$()似乎不起作用

[英]Using $() in docker commands doesn't seem to work

I want to stop all running docker containers with the command sudo docker stop $(docker ps -a -q) . 我想使用命令sudo docker stop $(docker ps -a -q)停止所有正在运行的Docker容器。 But when I run it, docker outputs 但是当我运行它时,docker输出


Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.39/containers/json?all=1: dial unix /var/run/docker.sock: connect: permission denied
"docker stop" requires at least 1 argument.
See 'docker stop --help'.

Usage:  docker stop [OPTIONS] CONTAINER [CONTAINER...]

Stop one or more running containers

Just running docker ps -a -q outputs the Docker IDs, but when I combine it with a Docker command, it doesn't work. 仅运行docker ps -a -q输出Docker ID,但是当我将其与Docker命令结合使用时,它将无法正常工作。 Thank you. 谢谢。

Aren't you trying to run docker ps -a -q and docker stop $(docker ps -a -q) in two different consoles/users? 您不是要在两个不同的控制台/用户中运行docker ps -a -qdocker stop $(docker ps -a -q)吗? The error shown is in fact two different errors: 显示的错误实际上是两个不同的错误:

  1. docker ps -q -a cannot complete due to insufficient permissions docker ps -q -a由于权限不足而无法完成
  2. docker stop ... gets empty argument list due to error in subshell docker stop ...由于子外壳错误而获取空参数列表

Edit: If using sudo each command is running in different shell/subshell which inherits privileges/environment. 编辑:如果使用sudo每个命令都在继承特权/环境的不同Shell /子Shell中运行。 But the subshells are invoked in order from the outermost. 但是子shell是从最外层开始按顺序调用的。 So the script will be invoket in order docker ps and then sudo docker stop . 因此,脚本将按docker docker ps顺序调用,然后按sudo docker stop docker stop的顺序调用。 The first one will not have privileges elevated. 第一个将没有特权提升。

我没有意识到在命令替换中还需要sudo:

sudo docker stop $(stop docker ps -a -q)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM