Docker构建无法找到并执行已存在的setup.sh脚本求助
问题
我正在为DECoN(v2.0.0)构建Docker容器,执行步骤如下:
- 基于最新bash镜像构建(
FROM bash:latest) - 通过
RUN命令下载工具源码并解压 - 将
WORKDIR设置为工具的./Linux子目录 - 执行该子目录中已存在的
setup.sh脚本
对应的Dockerfile内容:
# syntax=docker/dockerfile:1 # start from a bash image FROM bash:latest # download files RUN wget https://github.com/RahmanTeam/DECoN/archive/refs/tags/v2.0.0.tar.gz && \ tar -xf v2.0.0.tar.gz # go to directory WORKDIR DECoN-2.0.0/Linux # run setup script RUN setup.sh # check directory content RUN ls
执行构建命令docker build -t decon:2.0.0 .时返回错误:
/bin/sh: setup.sh: not found The command '/bin/sh -c setup.sh' returned a non-zero code: 127
我尝试过setup.sh、./setup.sh、/DECoN-2.0.0/Linux/setup.sh等多种执行方式,均无效。附setup.sh内容:
#!/bin/bash Rscript sessionInfo.R > setup.log 2>&1
解决方案
问题根源
核心问题有两个:
- 脚本无执行权限:从GitHub下载解压后的
setup.sh默认未赋予可执行权限,直接调用会触发错误。 - 缺失依赖环境:
setup.sh中调用了Rscript,但bash:latest仅包含基础bash环境,未安装R语言,即使脚本能执行,后续仍会报错。
修正后的Dockerfile
# syntax=docker/dockerfile:1 # 基于bash镜像构建 FROM bash:latest # 安装R语言依赖,解决Rscript不存在的问题 RUN apt-get update && apt-get install -y --no-install-recommends r-base # 下载、解压DECoN源码并清理压缩包 RUN wget https://github.com/RahmanTeam/DECoN/archive/refs/tags/v2.0.0.tar.gz && \ tar -xf v2.0.0.tar.gz && \ rm v2.0.0.tar.gz # 切换至目标目录,给脚本添加可执行权限 WORKDIR DECoN-2.0.0/Linux RUN chmod +x setup.sh # 执行setup脚本 RUN ./setup.sh # 验证执行结果 RUN cat setup.log && ls
关键修正说明
- 添加执行权限:通过
chmod +x setup.sh赋予脚本可执行权限,保证系统能识别并运行它。 - 安装R环境:使用
apt-get安装r-base,满足Rscript的运行依赖。 - 明确脚本路径:用
./setup.sh指定当前目录下的脚本,避免依赖系统PATH环境变量查找。 - 清理冗余文件:删除下载的压缩包,减小镜像体积。
内容的提问来源于stack exchange,提问作者schmat_90
相关产品推荐
相关产品推荐

