【问题标题】:Cannot pipe docker pid to bash command无法通过管道将 docker pid 传递给 bash 命令
【发布时间】:2016-11-30 17:32:32
【问题描述】:

我通常想在 docker 映像上打开一个 bash shell。一个多命令过程是:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
bba983d72d48        scubbo/datenight    "apachectl -DFOREGROU"   7 days ago          Up 7 days           0.0.0.0:80->80/tcp   pensive_bell
$ docker exec -it bba983d72d48 bash

我想快捷方式。但是,我收到以下错误:

$ docker ps | awk 'NR > 1 {print $1}' | xargs -I {} docker exec -it {} bash
cannot enable tty mode on non tty input

通过一点谷歌搜索,我找到了 this issue - 但是,如果我放弃 -t 选项,命令会立即“完成”。

我已确认手动将$ docker ps | awk 'NR > 1 {print $1}' 的输出复制粘贴到docker exec -it {} bash 的适当位置是成功的。

编辑:从管道中删除docker ps,以下也失败了:

$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
4f20409c37b7        scubbo/datenight    "apachectl -DFOREGROU"   8 days ago          Up 8 days           0.0.0.0:80->80/tcp   drunk_northcutt
$ docker ps -q
4f20409c37b7
$ echo '4f20409c37b7' | xargs -I {} docker exec -it {} bash
cannot enable tty mode on non tty input

【问题讨论】:

    标签: shell awk docker xargs


    【解决方案1】:

    注意docker ps -q 仅输出正在运行的容器的 id

    如果你只启动了一个容器,就这样做

    docker exec -it $(docker ps -q) bash

    如果要进入上次启动的容器

    docker exec -it $(docker ps -lq) bash

    如果您在启动容器时为其命名

    docker run --name nostalgic...

    然后你可以过滤它

    docker exec -it $(docker ps -q --filter "name=nostalgic") bash

    查看文档

    https://docs.docker.com/engine/reference/commandline/ps/

    【讨论】:

    • 谢谢,这是一组简洁的命令!不过,我仍然不确定为什么我不能将 id 输入xargs docker exec
    【解决方案2】:

    我倾向于这样做,但我会嵌套我的命令

    docker exec -it $(docker ps | awk 'NR > 1 {print $1}') bash
    

    警告,如果有多个容器在运行,您将收到错误消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多