无法将Docker进程ID传输到Bash命令中。

4

我经常需要在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

经过一番搜索,我找到了这个问题但是,如果我去掉-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个回答

2
请注意,docker ps -q 只输出正在运行的容器的ID。
如果您只启动了一个容器,请执行以下命令: docker exec -it $(docker ps -q) bash 如果您想进入最后启动的容器,请执行以下命令: docker exec -it $(docker ps -lq) bash 如果您在启动容器时为其命名,则可以使用以下命令过滤它: docker exec -it $(docker ps -q --filter "name=nostalgic") bash 请查看文档: https://docs.docker.com/engine/reference/commandline/ps/

谢谢,这是一组很棒的命令!不过我还不确定为什么无法将id管道传递到 xargs docker exec - scubbo

1
我倾向于这样做,但我会嵌套我的命令。
docker exec -it $(docker ps | awk 'NR > 1 {print $1}') bash

警告:如果有多个容器正在运行,则会出现错误。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接