首页 > 解决方案 > 在 Docker 中运行脚本时如何重定向终端 STDIN?

问题描述

我有一个使用用户输入的脚本。它是这样运行的:

./script <<EOF
> input
> onther input
> more input
> EOF

我需要将脚本作为 Docker 映像分发。

我可以分两步运行脚本。首先,我进入容器外壳。

docker run -it my-docker-tag sh

然后,在 shell 中,我执行脚本本身。

问题:是否可以在关闭时运行脚本(无需导航到容器)?

我试过这个:

docker run -it my-docker-tag ./script <<EOF
> input
> onther input
> more input
> EOF

但它失败了:

输入设备不是 TTY

标签: linuxdockershtty

解决方案


Docker 运行参考说明:

-t当客户端从管道接收其标准输入时,禁止指定,如下所示:

$ echo test | docker run -i busybox cat

如果删除该-t选项,围绕(前台)docker run命令的 shell 管道和重定向将按预期工作。

# A heredoc as in the question should work too
sudo docker run --rm my-docker-tag ./script <script-input.txt

推荐阅读