运行 `bash` 使用 docker exec 和 xargs 命令
Running `bash` using docker exec with xargs command
我一直在尝试在 运行 docker 容器上执行 bash,具体名称如下。 --(1)
docker ps | grep somename | awk '{print " bash"}' | xargs -I'{}' docker exec -it '{}'
但它没有用,它显示了类似
的消息
"docker exec" requires at least 2 argument(s)
当我尝试使用如下命令时 --(2)
docker ps | grep somename | awk '{print " bash"}' | xargs docker exec -it
它显示另一个错误消息,例如
the input device is not a TTY
但是当我尝试使用 $() (sub shell) 然后它可以完成但我不明白为什么它不适用于两个代码 (1)(2)以上(使用 xargs)
任何人都可以解释为什么会发生这种情况吗?
非常感谢您提前提供的任何帮助=)
编辑 1:
我知道如何以其他方式实现我的目标,例如
docker exec -it $(docker ps | grep perf | awk '{print " bash"}' )
但我很好奇为什么这些代码不起作用 =)
你运行的exec命令是这样的:
docker exec -it 'a1b2c3d4 bash'
这只是一个论点,不是两个。您需要删除 docker exec.
参数周围的引号
... | xargs -I'{}' docker exec -it {}
那么你将使用两个参数正确执行。
docker exec -it a1b2c3d4 bash
------ ---
first arg ^ ^ second arg
- 第一题
"docker exec" requires at least 2 argument(s)
在最后一个管道命令中,xargs 的标准输入是,例如,42a9903486f2 bash
。并且您将 xargs 与 -I (替换字符串)选项一起使用。
因此,docker 认识到 42a9903486f2 bash
是第一个参数,没有第二个参数。
下面的例子也许就是你所期望的。
docker ps | grep somename | awk '{print " bash"}' | xargs bash -c 'docker exec -it [=10=] '
- 第二个问题
the input device is not a TTY
xargs 在新的子进程上执行命令。所以需要重新打开stdin给子进程进行交互通信。 (MacOS:-o 选项)
docker ps | grep somename | awk '{print " bash"}' | xargs -o docker exec -it
这对我有用:
sudo docker ps -q | xargs -I'{}' docker exec -t {} du -hs /tmp/
我一直在尝试在 运行 docker 容器上执行 bash,具体名称如下。 --(1)
docker ps | grep somename | awk '{print " bash"}' | xargs -I'{}' docker exec -it '{}'
但它没有用,它显示了类似
的消息"docker exec" requires at least 2 argument(s)
当我尝试使用如下命令时 --(2)
docker ps | grep somename | awk '{print " bash"}' | xargs docker exec -it
它显示另一个错误消息,例如
the input device is not a TTY
但是当我尝试使用 $() (sub shell) 然后它可以完成但我不明白为什么它不适用于两个代码 (1)(2)以上(使用 xargs)
任何人都可以解释为什么会发生这种情况吗?
非常感谢您提前提供的任何帮助=)
编辑 1:
我知道如何以其他方式实现我的目标,例如
docker exec -it $(docker ps | grep perf | awk '{print " bash"}' )
但我很好奇为什么这些代码不起作用 =)
你运行的exec命令是这样的:
docker exec -it 'a1b2c3d4 bash'
这只是一个论点,不是两个。您需要删除 docker exec.
参数周围的引号... | xargs -I'{}' docker exec -it {}
那么你将使用两个参数正确执行。
docker exec -it a1b2c3d4 bash
------ ---
first arg ^ ^ second arg
- 第一题
"docker exec" requires at least 2 argument(s)
在最后一个管道命令中,xargs 的标准输入是,例如,42a9903486f2 bash
。并且您将 xargs 与 -I (替换字符串)选项一起使用。
因此,docker 认识到 42a9903486f2 bash
是第一个参数,没有第二个参数。
下面的例子也许就是你所期望的。
docker ps | grep somename | awk '{print " bash"}' | xargs bash -c 'docker exec -it [=10=] '
- 第二个问题
the input device is not a TTY
xargs 在新的子进程上执行命令。所以需要重新打开stdin给子进程进行交互通信。 (MacOS:-o 选项)
docker ps | grep somename | awk '{print " bash"}' | xargs -o docker exec -it
这对我有用:
sudo docker ps -q | xargs -I'{}' docker exec -t {} du -hs /tmp/