You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker构建生成entrypoint.sh,run传环境变量报exec格式错误如何解决

问题排查与修复方案

核心报错原因

  • 缺少脚本解释器声明:你生成的/opt/entrypoint.sh没有首行的shebang声明,系统无法识别用什么解释器执行脚本,直接触发exec format error。这是你加了变量配置后刚好触发报错的直接诱因(之前脚本内容符合默认执行规则的场景可能不报错,但属于不规范写法)。
  • 变量引用时机错误:你当前写法里的${OV_PASSWORD}会在镜像构建阶段就被Docker解析替换,你构建镜像时没有传递这个环境变量的话,写入脚本的内容就会变成gvmd --user=admin --new-password=,根本拿不到docker run时传递的运行时环境变量。

修复后的Dockerfile配置

你需要给脚本加shebang声明,同时转义变量前的$符号,让变量原样写入脚本,等到容器运行时再解析:

FROM kalilinux/kali-rolling

RUN echo '#!/bin/bash' > /opt/entrypoint.sh && \
    echo "\n##### Provision openvas user #####\n" >> /opt/entrypoint.sh && \
    echo "useradd -rm -d /home/openvas -s /bin/bash -g _gvm openvas" >> /opt/entrypoint.sh && \
    echo "chown -R openvas:_gvm /home/openvas" >> /opt/entrypoint.sh && \
    echo "gvmd --user=admin --new-password=\${OV_PASSWORD}" >> /opt/entrypoint.sh && \
    chmod +x /opt/entrypoint.sh

ENTRYPOINT ["/opt/entrypoint.sh"]
CMD ["tail", "-f","/dev/null"]

补充说明

你当前的docker run命令末尾加了/bin/bash,这个参数只会覆盖Dockerfile里的CMD指令,不会跳过ENTRYPOINT执行,容器启动后还是会先跑entrypoint.sh的所有逻辑,再进入bash。如果你需要直接进入容器shell不执行ENTRYPOINT,可以启动时加参数--entrypoint=/bin/bash。

内容的提问来源于stack exchange,提问作者LewlSauce

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 12:24:04