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

Docker部署Azure DevOps代理启动报错./start.sh不存在排查

Azure DevOps容器代理启动报exec ./start.sh: no such file or directory排查方案

这个报错在Docker容器启动场景下,绝大多数情况不是文件未复制进镜像,而是文件格式、路径配置、解释器配置的隐性问题,按以下优先级从高到低排查即可:

  • 第一优先级:排查脚本换行符格式问题
    如果你在Windows环境下编写start.sh,文件默认会使用CRLF(\r\n)换行格式,而Linux系统仅识别LF(\n)换行。此时脚本第一行的解释器声明(shebang)会被拼接上多余的回车符,被系统识别为无效的解释器路径,直接抛出“找不到文件”的错误,和你描述的现象完全匹配。
    排查修复方式:
    1. 本地编辑时直接切换换行格式:用VS Code打开start.sh,点击右下角状态栏的CRLF标识,切换为LF后保存重新构建镜像即可
    2. 不想改本地文件的话,可以直接在Dockerfile中增加格式转换步骤:安装dos2unix工具,在复制脚本后执行dos2unix ./start.sh自动转换格式
    3. 临时验证可以启动调试容器进入镜像内部:执行docker run --rm -it --entrypoint bash dockeragent:latest进入容器后,先执行ls -l /azp/start.sh确认文件存在,再执行cat -v /azp/start.sh,如果每行末尾出现^M标识,就可以确定是换行符问题。
  • 第二优先级:排查脚本解释器声明错误
    检查start.sh第一行的解释器声明,ubuntu:20.04镜像内bash的默认路径是/bin/bash,如果声明写成了#!/usr/bin/bash、带不存在的执行参数,或者路径拼写错误,也会触发同类报错。直接把第一行修改为标准的#!/bin/bash即可。
  • 第三优先级:排查Dockerfile指令顺序问题
    确认Dockerfile中WORKDIR /azp指令的位置,如果是先执行COPY start.sh .再设置工作目录,start.sh会被复制到镜像根目录而非/azp路径下,ENTRYPOINT执行相对路径./start.sh时自然找不到文件。调整指令顺序,保证先设置工作目录,再执行文件复制、权限配置步骤即可。
  • 第四优先级:排查执行权限链路问题
    如果你参照文档创建了非root的运行用户(比如azp用户),需要确认chmod +x start.sh步骤是在切换运行用户之前执行,或者显式给运行用户授予脚本的读+执行权限,避免因为权限不足被系统误报为文件不存在。权限配置可以参考指令:chmod 755 ./start.sh && chown azp:azp ./start.sh。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:33:20