运行 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
我有一个使用用户输入的脚本。是这样的运行:
./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