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

运行Docker容器提示找不到镜像内已复制脚本的问题求助

问题排查结果

核心报错原因

  • 直接触发找不到文件的原因是CMD指令中脚本路径写法错误:你通过COPY指令将脚本放到了容器内的绝对路径/home/$USER_NAME/yocto/input/下,但CMD里写的路径是./home/$USER_NAME/yocto/input/prep.sh,前缀带的./表示相对当前工作目录(即你通过WORKDIR指定的$BUILD_OUTPUT_DIR)查找路径,该目录下不存在home/rtr2460/yocto/input/prep.sh的层级结构,因此抛出文件不存在错误。
  • 额外潜在风险:Azure Pipelines任务中的docker run镜像地址存在域名重复问题,当前写法为2460testacr.azurecr.io/2460testacr.2460testacr.azurecr.io:$(tag),不符合ACR镜像的标准命名格式,可能导致拉取到旧版本镜像、镜像拉取失败等问题。

构建阶段RUN ls -l /home/$USER_NAME/yocto/input/*.sh能正常列出文件,是因为该命令使用了绝对路径查找,和启动时的相对路径错误不冲突。

修复方案

  • 修改Dockerfile中的CMD指令,去掉路径前多余的./前缀,使用绝对路径调用脚本:
# 修正后的CMD配置,sh -c会自动展开路径中的环境变量
CMD ["sh","-c", "/home/$USER_NAME/yocto/input/prep.sh && bitbake $PROJECT"]
  • 修正Azure Pipelines中docker run的镜像地址,删除重复的ACR域名段,标准格式参考:
- task: Docker@2
  inputs:
    containerRegistry: '2460-ACR-connection-TMM'
    command: 'login'
- script: |
    # 镜像格式为<ACR服务地址>/<仓库名>:<标签>,按实际仓库名替换<your-repo>即可
    docker run 2460testacr.azurecr.io/<your-repo>:$(tag)
  • 推送镜像前可本地做前置验证:
    • 构建本地镜像后执行docker run --entrypoint sh <本地镜像名:标签>进入容器交互终端
    • 执行ls -l /home/$USER_NAME/yocto/input/prep.sh确认文件存在
    • 直接执行绝对路径脚本确认无路径错误后再推送至ACR

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 18:21:56