AWS SAM CLI构建Lambda容器镜像失败,路径含冒号报错
解决AWS SAM CLI部署容器镜像到Lambda的WinError 123问题
问题根源
Windows系统的文件名、目录名不允许包含冒号(:),而SAM CLI默认生成的镜像标签采用镜像名:版本号的格式,导致系统无法识别该路径,触发OSError: [WinError 123] 文件名、目录名或卷标语法不正确错误。
具体解决方案
1. 修改SAM模板(template.yaml)的镜像配置
在Lambda函数的Metadata或Properties中调整镜像标签格式,替换冒号为Windows兼容的字符(如下划线_或连字符-):
Resources: InferenceFunction: Type: AWS::Serverless::Function Properties: PackageType: Image ImageConfig: Command: ["app.lambda_handler"] Metadata: DockerTag: latest DockerContext: ./ Dockerfile: Dockerfile # 可选:指定自定义镜像名称,避免冒号 DockerImage: inferencefunction_latest
2. 自定义构建时的镜像标签
执行sam build时,通过--docker-build-args参数指定不含冒号的镜像名称:
sam build --docker-build-args "-t inferencefunction_latest" && sam deploy --guided
3. 清理缓存与旧镜像
残留的缓存或旧镜像可能引发冲突,执行以下命令清理:
# 清理SAM构建缓存 sam build --use-container --cached # 删除本地不符合命名规则的旧镜像 docker rmi inferencefunction:latest
4. 检查Dockerfile的兼容性
确保Dockerfile中未使用Windows不支持的路径或命令:
- 所有文件路径使用相对路径,避免含特殊字符的绝对路径
- 验证
CMD或ENTRYPOINT命令的语法正确性
内容的提问来源于stack exchange,提问作者Joysn
相关产品推荐
相关产品推荐

