AWS Batch无法找到Docker容器内脚本但本地运行正常求助
基于Dockerfile构建镜像用于AWS Batch运行脚本,已创建计算环境、作业定义和作业队列,但执行作业时返回错误:
CannotStartContainerError: ResourceInitializationError: failed to create new container runtime task: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "mnt/app/export_script.sh": stat mnt/app/export_script.sh: no such file or directory: unknown
Dockerfile内容:
FROM oraclelinux:8 ARG release=19 ARG update=20 RUN dnf -y install oracle-release-el8 && \ dnf install unzip && \ dnf -y install oracle-instantclient${release}.${update}-basic oracle-instantclient${release}.${update}-devel oracle-instantclient${release}.${update}-tools oracle-instantclient${release}.${update}-sqlplus && \ rm -rf /var/cache/dnf RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && unzip awscliv2.zip && ./aws/install WORKDIR /app COPY /scripts/* /app/ RUN chmod +x /app/export_script.sh /app/import_script.sh ENV LD_LIBRARY_PATH=/usr/lib/oracle/${release}.${update}/client64/lib:$LD_LIBRARY_PATH ENV PATH=/usr/lib/oracle/${release}.${update}/client64/bin:$PATH CMD [ "/bin/bash", "./export_script.sh" ]
本地Docker Desktop运行镜像可正常找到脚本(仅因未连接AWS无法执行功能),修改Dockerfile、CMD及作业传入命令均未解决问题。
检查作业定义的命令配置
错误提示中的路径mnt/app/export_script.sh缺少根目录/,大概率是作业定义里指定的命令使用了错误路径。如果作业定义覆盖了镜像默认CMD,确保脚本路径为绝对路径:["bash", "/app/export_script.sh"]若无需自定义命令,直接保留镜像默认CMD即可,不要在作业定义中额外指定。
修正Dockerfile的CMD路径
尽管本地运行正常,但AWS Batch的容器环境对相对路径解析可能存在差异,将CMD中的相对路径改为绝对路径:CMD [ "/bin/bash", "/app/export_script.sh" ]重新构建镜像并推送至AWS ECR。
验证镜像内脚本路径
本地运行容器后,执行ls -l /app确认脚本存在,同时用echo $PWD验证WORKDIR是否为/app。也可在Dockerfile中添加以下命令,构建时直接验证:RUN pwd && ls -l /app排查卷挂载冲突
若作业定义中配置了卷挂载,确认挂载路径未覆盖/app目录——挂载会替换目标目录内容,导致镜像内的脚本被覆盖丢失。
内容的提问来源于stack exchange,提问作者arthur248

