运行 Docker 中的脚本时如何重定向终端 STDIN?

How to redirtect terminal STDIN when running a script in Docker?

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

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

我需要将脚本作为 Docker 图片分发。

我可以 运行 脚本分两步完成。 首先,我进入容器 shell.

docker run -it my-docker-tag sh

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

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

我试过这个:

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

但它失败了:

the input device is not a TTY

注释:

Specifying -t is forbidden when the client is receiving its standard input from a pipe, as in:

$ echo test | docker run -i busybox cat

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

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