无法管道docker pid到bash命令

时间:2016-07-26 21:57:25

标签: shell awk docker xargs

我通常想在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

2 个答案:

答案 0 :(得分:1)

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

docker exec -it $(docker ps | awk 'NR > 1 {print $1}') bash
但是,如果有多个容器在运行,你会收到错误。

答案 1 :(得分: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/