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

AWS SageMaker中复制Python脚本到Docker容器报错求助

Docker复制脚本报错排查方案

核心问题几乎都是Docker build上下文与COPY指令路径不匹配,和SageMaker环境本身无关,按以下步骤逐一定位即可:

先搞懂build上下文的基础规则

  • Docker执行COPY/ADD指令时,只能访问build上下文范围内的文件,上下文是你执行docker build命令最后传入的路径,和Dockerfile本身存放在哪个文件夹没有必然联系。
  • 举个典型错误示例:你的目录结构是项目根目录/src/train_sm.py、项目根目录/docker/Dockerfile,如果你在项目根目录执行docker build -f docker/Dockerfile .,此时上下文是项目根目录,Dockerfile里写COPY train_sm.py /opt/ml/code/必然报错,正确写法是COPY src/train_sm.py /opt/ml/code/。
  • 如果你是切到docker文件夹下执行docker build -t img .,此时上下文是docker文件夹,就算你把train_sm.py移到了docker文件夹里,也要确认:
    • COPY指令写的源文件名和实际文件名完全一致(SageMaker底层是Linux环境,严格区分大小写,注意不要有隐藏后缀比如train_sm.py.txt)
    • 执行build的用户对脚本文件有读权限

快速定位技巧

  • 不要靠记忆猜路径,先在SageMaker Notebook单元格执行!pwd确认当前工作路径,再执行!ls -R打印全目录结构,和你写的COPY路径逐字符比对。
  • 临时在Dockerfile的COPY指令前加两行调试代码:
    COPY . /tmp/debug_ctx
    RUN ls -R /tmp/debug_ctx
    
    重新执行build,看日志里打印的上下文文件列表,直接找train_sm.py的实际路径,照着日志里的路径改COPY的源参数即可,10分钟内就能定位路径问题。
  • 检查上下文根目录下的.dockerignore文件,确认没有配置规则把.py文件、src目录或者docker目录排除在构建上下文外。

移动文件到docker文件夹仍报错的常见原因

  • 移动文件后没有切换build命令的上下文路径,还是用了之前指向项目根目录的上下文参数,自然找不到移到docker文件夹里的脚本。
  • 移动文件后COPY指令的路径没同步改,比如上下文已经是docker文件夹、脚本就在docker文件夹根下,还保留着之前写的COPY src/train_sm.py .配置。

最快验证方案:先把Dockerfile移到项目根目录,和src文件夹同级,在项目根目录执行docker build -t test-img .,Dockerfile里写COPY src/train_sm.py /目标路径/,这个配置没有路径嵌套问题,绝大多数场景下能直接构建成功,后续再按需调整目录结构即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:01:04