linux - 在 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
解决方案
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
推荐阅读
- express - 将nginx与expressJS结合使用时,我应该在express还是nginx中使用压缩?
- c++ - 尝试通过 memcpy 复制大尺寸浮点向量时出现分段错误
- javascript - 如何根据不同变量的属性值对 JSON 数据进行分组?
- laravel - 在 Laravel 中获得雄辩的链接以从 mysql 复制连接
- javascript - 如果从 IBM Domino lotusscript 代理收到的响应文本有一个“€”符号,那么它显示的是€
- javascript - React 导出样式表
- android-studio - JUnit 测试类模板未在 Kotlin 项目中转换为 Kotlin 文件
- reactjs - Redux-logger 不适用于(使用 react-native)
- javascript - 为 3d 条形图添加边框颜色和宽度
- c# - 填充列表
从数据表列