如何在Dockerfile中运行需多步交互式输入的OWASP安装bash脚本
Dockerfile非交互运行OWASP ZAP安装脚本解决方案
针对你需要在Docker构建过程中无交互执行ZAP安装脚本的需求,有两种成熟解决方案:
方案1:使用安装脚本原生静默参数(最推荐)
ZAP官方提供的Unix安装脚本本身支持无交互安装模式,无需手动传递交互输入,稳定性更高,不会因为脚本交互逻辑变更失效。
你只需要将最后一行执行脚本的指令修改为带静默参数的版本即可,示例:
RUN /home/owasp/ZAP_2_11_0_unix.sh -q -dir /opt/zaproxy
参数说明:
-q开启静默模式,跳过所有交互提示-dir指定安装路径,可根据自己的需求调整路径
方案2:手动传递交互输入(通用适配所有脚本)
如果遇到没有提供静默安装参数的第三方脚本,可以用printf命令按交互顺序把需要的内容传递给脚本,每一个输入项用\n代表回车确认。
比如你需要依次输入1、Y、两次回车,指令写法如下:
RUN printf "1\nY\n\n" | /home/owasp/ZAP_2_11_0_unix.sh
额外优化说明
- 你原Dockerfile最后一行的
./home/owasp/ZAP_2_11_0_unix.sh是相对路径错误,要改成绝对路径/home/owasp/ZAP_2_11_0_unix.sh,否则构建时会报文件不存在错误 - 建议将
ARG DEBIAN_FRONTEND=noninteractive移动到所有apt-get install操作之前,避免部分系统包安装时弹出时区、许可等交互提示,导致构建卡住
修改后的完整Dockerfile参考
FROM ubuntu:20.04 # 提前设置非交互模式,避免apt安装弹出交互提示 ARG DEBIAN_FRONTEND=noninteractive ENV TZ=Indian RUN apt-get update && apt-get upgrade -y && apt-get clean RUN apt-get install python3-pip -y RUN apt-get install vim -y # Install OpenJDK-8 RUN apt-get install -y openjdk-8-jdk && \ apt-get install -y ant && \ apt-get clean; # Fix certificate issues RUN apt-get update && \ apt-get install ca-certificates-java && \ apt-get clean && \ update-ca-certificates -f ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/ RUN export JAVA_HOME RUN apt-get install wget -y && \ apt-get install unzip -y && \ apt-get install zip -y RUN mkdir /home/owasp RUN wget -c https://github.com/zaproxy/zaproxy/releases/download/v2.11.0/ZAP_2_11_0_unix.sh -P /home/owasp RUN chmod u+x /home/owasp/ZAP_2_11_0_unix.sh # 使用静默模式安装 RUN /home/owasp/ZAP_2_11_0_unix.sh -q -dir /opt/zaproxy
内容的提问来源于stack exchange,提问作者user3214392
相关产品推荐
相关产品推荐

