管道 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:/#
-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 指令指定的默认命令。
在我的开发中,我发现自己经常在生成的容器 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:/#
-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 指令指定的默认命令。