使用“-”在管道中读取标准输出失败“docker exec”

使用“-”在管道中读取标准输出失败“docker exec”

我想通过将第一个容器 ID 传送给 docker exec 来为我的 Docker 实例启动一个 bash 终端:

docker ps | head -2 | grep -v CONTAINER | cut -d' ' -f1 | docker exec -i -t - bash

最终-应该将前一个管道进程的标准输出作为变量传递。但我得到的却是:

Error response from daemon: no such id: -

我猜测该docker程序会干扰 shell 读取参数的方式。

有办法解决这个问题吗?(通过程序docker或 shell 解决方案)。


附加信息

该子管道:

docker ps | head -2 | grep -v CONTAINER | cut -d' ' -f1 

产生输出:

7dae6507d01a

这是正确的。所以这里没有问题。

答案1

-不会被 shell 解析,它只是一个参数,某些命令会将其识别为“从 stdin 读取”。显然,docker 不会。

您需要使用 xargs 将 id 作为实际参数传递。这应该有效:

 docker ps | head -2 | grep -v CONTAINER | cut -d' ' -f1 | xargs -I '{}' docker exec -i -t '{}' bash

相关内容