我正在创建Dockerfile脚本,它有一个执行程序的命令行,需要用户输入 1 键盘作为选择的选项才能继续执行。
在这种情况下,更新源代码:
首先,下载并解压缩RevoMath库,导航到RevoMath文件夹,然后执行安装脚本。
...
RUN wget -q https://mran.microsoft.com/install/mro/3.2.4/RevoMath-3.2.4.tar.gz
RUN tar -xzf RevoMath-3.2.4.tar.gz
RUN cd RevoMath/
RUN ./RevoMath.sh
...
安装脚本有一些选择选项如下:
echo "1. Install MKL"
echo "2. Uninstall MKL"
echo "3. Exit utility"
我们需要从键盘输入 1 进行安装。我们怎么能通过Docker命令来做呢?
任何帮助将不胜感激!
答案 0 :(得分:0)
如果我正确理解您,您希望在 Dockerfile 中echo 1 |
之前添加./RevoMath.sh
:
...
RUN cd RevoMath/ && echo 1 | ./RevoMath.sh
...
BTW:在你的例子中,这些行无法按预期工作:
RUN cd RevoMath/
RUN ./RevoMath.sh
因为每个RUN
都是独立执行。
如果要从特定文件夹执行RevoMath.sh脚本,则应使用&&
(参见我的示例)
答案 1 :(得分:0)
我建议使用标准输入的重定向。
例如,install.sh在执行时需要用户输入一些输入
假设您需要输入 1 作为对第一次互动(问题)和
的回复
那么你有另一个响应 y 进行进一步的交互,那么最好使用stdin的重定向。
$#>install.sh <EOF
$#>1
$#>y
$#>EOF
这样每当脚本等待输入时,第一个问题的答案为1,第二个问题的答案为y。