pipe道docker工运行容器IDdocker执行

在我的开发中,我发现自己发出了一个docker run命令,后面跟着一个docker exec命令,这个命令对生成的容器ID非常频繁。 在命令之间复制/粘贴容器ID有点令人讨厌,所以我试图将容器ID传入我的docker exec命令。

这是我的示例命令。

docker run -itd image | xargs -i docker exec -it {} bash

这启动容器,但是我得到以下错误。

 the input device is not a TTY 

有没有人有任何想法如何解决这个问题?

编辑:我也忘了提及我有一个ENTRYPOINT定义,不能重写。

做这个,而不是:

 ID=$(docker run -itd image) && docker exec -it $ID bash 

因为xargs在不分配新的tty的情况下执行它的参数。

如果你只是想“打”到容器中,你不必传递容器id。 你可以简单地运行

 docker run -it --rm <image> /bin/bash 

例如,如果我们采取Ubuntu的基础形象

 docker run -it --rm ubuntu /bin/bash root@f80f83eec0d4:/# 

从文档

-t:分配一个伪tty
-i:即使未连接,也要保持STDIN打开
–rm:当容器退出时自动移除容器

命令/ bin / bash将覆盖 Dockerfile中用CMD指令指定的默认命令。