管道 docker 运行 容器 ID 到 docker exec

Piping docker run container ID to docker exec

在我的开发中,我发现自己经常在生成的容器 ID 上发出 docker run 命令,然后再发出 docker exec 命令。在命令之间必须 copy/paste 容器 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的情况下执行它的参数。

如果您只是想 "bash"- 进入容器,则不必四处传递容器 ID。你可以简单地 运行

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

例如,如果我们使用 ubuntu 基本图像

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

来自 documentation

-t : Allocate a pseudo-tty
-i : Keep STDIN open even if not attached
--rm : Automatically remove the container when it exits

命令 /bin/bash overwrites Dockerfile 中使用 CMD 指令指定的默认命令。