【问题标题】:Running `bash` using docker exec with xargs command使用带有 xargs 命令的 docker exec 运行 `bash`
【发布时间】:2017-09-16 02:30:19
【问题描述】:

我一直在尝试在运行的 docker 容器上执行 bash,该容器具有如下特定名称。 --(1)

docker ps | grep somename | awk '{print  $1 " bash"}' | xargs -I'{}' docker exec -it '{}'

但它不起作用,它显示一条消息,如

“docker exec”至少需要 2 个参数




当我尝试使用如下命令时 --(2)

docker ps | grep somename | awk '{print  $1 " bash"}' | xargs docker exec -it

它显示另一个错误消息,例如

输入设备不是 TTY




但是当我尝试使用 $() (子 shell)时,它可以完成,但我不明白为什么它不能与上面的两个代码 (1)(2) 一起工作(使用 xargs)

任何机构都可以解释为什么会这样吗?

非常感谢您提前提供的任何帮助 =)




编辑 1:

我知道如何以其他方式实现我的目标,例如

docker exec -it $(docker ps | grep perf | awk '{print  $1 " bash"}' )

但我只是好奇为什么这些代码不起作用 =)

【问题讨论】:

  • 您的 EDIT 1 是唯一的解决方案。谢谢!

标签: docker xargs


【解决方案1】:
  • 第一个问题

“docker exec”至少需要 2 个参数

在最后一个管道命令中,xargs 的标准输入例如是42a9903486f2 bash。你使用 xargs-I (替换字符串)选项。 因此,docker 认识到 42a9903486f2 bash 是第一个参数,没有第二个参数。

下面的例子也许是你所期望的。

docker ps | grep somename | awk '{print  $1 " bash"}' | xargs bash -c 'docker exec -it $0 $1'
  • 第二个问题

输入设备不是 TTY

xargs 在新的子进程上执行命令。所以你需要重新打开stdin到子进程进行交互通信。 (MacOS:-o 选项)

docker ps | grep somename | awk '{print  $1 " bash"}' | xargs -o docker exec -it

【讨论】:

  • 这是我所期望的完美答案。我真的很感谢你的好意=)它真的帮助了我很多
【解决方案2】:

这对我有用:

sudo docker ps -q | xargs -I'{}' docker exec -t {} du -hs /tmp/

【讨论】:

    【解决方案3】:

    你运行的 exec 命令是这样的:

    docker exec -it 'a1b2c3d4 bash'
    

    这只是一个论点,不是两个。您需要删除 docker exec 参数周围的引号。

    ... | xargs -I'{}' docker exec -it {}
    

    然后你将使用两个参数正确执行。

    docker exec -it a1b2c3d4 bash
                     ------   ---
             first arg ^       ^ second arg
    

    【讨论】:

    • 谢谢丹。我也尝试过使用“docker ps | grep somename | awk '{print $1 " bash"}' | xargs -I'{}' docker exec -it {}” 但它对我不起作用^^;它显示消息"docker exec" requires at least 2 argument(s),就像第一次尝试的结果一样。
    • @user3400490 你在尝试中遇到了什么错误?
    • "docker exec" requires at least 2 argument(s) like the result of first try. 作为上面的编辑评论 =)
    • @Abraxas5 上面有docker exec -it,但后面没有{}。两种不同的东西...您是否尝试过使用 {} 但周围没有引号?
    • 在旁注中,您应该使用docker ps --filter 参见此(过时)文档docs.docker.com/v1.11/engine/reference/commandline/ps 和示例
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2020-04-25
    • 1970-01-01
    • 2016-01-29
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多