Dockerfile中无法运行bash脚本求助:文件存在却提示找不到
问题排查与解决
以下是几种常见的原因和对应的解决办法:
脚本依赖的Shell不存在
如果脚本开头的shebang是#!/bin/bash,但你使用的基础镜像(比如alpine这类轻量镜像)默认没有安装bash,只有/bin/sh。这时候要么修改脚本的shebang为#!/bin/sh,要么在Dockerfile里先安装bash:RUN apk add --no-cache bash # 针对alpine镜像 # 或者Debian/Ubuntu系 RUN apt-get update && apt-get install -y bash && rm -rf /var/lib/apt/lists/*脚本使用Windows换行符(CRLF)
如果脚本是在Windows环境下创建或复制到容器的,换行符会是CRLF而不是Linux的LF。容器里的Shell会把#!/bin/bash\r当成一个完整的命令路径,自然找不到。可以在Dockerfile里添加转换命令:RUN sed -i 's/\r$//' /opt/build_script.run尝试使用绝对路径执行
虽然已经设置了WORKDIR /opt/,但可以试试用绝对路径执行排除路径问题:RUN /opt/build_script.run检查脚本内容是否合法
可以在Dockerfile里打印脚本内容确认:RUN cat /opt/build_script.run确保shebang正确,没有其他语法错误导致Shell无法识别。
内容的提问来源于stack exchange,提问作者TheWalkingMalteser
相关产品推荐
相关产品推荐

