执行pulumi up时遭遇pulumi_docker.ResourceError:镜像摘要不可用
问题:Pulumi部署时触发"No digest available for image"错误
运行pulumi up部署应用时,出现以下错误:
pulumi_docker.docker.ResourceError: No digest available for image 1234567890987.dkr.ecr.us-west-2.amazonaws.com/cloud/abcd-svc-4c4ac5e
当前使用的依赖版本:
- pulumi==3.40.1
- pulumi-aws==5.15.0
- pulumi-docker==3.4.1
- python-dotenv==0.21.0
解决方法
1. 先确认本地镜像构建是否正常
手动在本地构建镜像,检查是否能生成带digest的镜像:
# 构建镜像 docker build -t 1234567890987.dkr.ecr.us-west-2.amazonaws.com/cloud/abcd-svc-4c4ac5e . # 查看镜像digest docker inspect 1234567890987.dkr.ecr.us-west-2.amazonaws.com/cloud/abcd-svc-4c4ac5e | grep Digest
如果本地构建也没有digest,先排查Dockerfile问题,比如基础镜像是否能正常拉取、构建过程有没有报错。
2. 升级pulumi-docker版本
当前用的pulumi-docker 3.4.1存在digest获取的已知bug,直接升级到3.6.0及以上版本:
pip install --upgrade pulumi-docker
3. 验证ECR权限与镜像状态
检查AWS账号是否有ECR的读写权限,同时确认镜像已经推送到仓库:
# 查看ECR中的镜像列表 aws ecr describe-images --repository-name cloud/abcd-svc-4c4ac5e --region us-west-2
如果返回空列表,先手动登录ECR再重新部署:
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin 1234567890987.dkr.ecr.us-west-2.amazonaws.com pulumi up
4. 禁用构建缓存
缓存可能导致digest生成异常,在Pulumi的Docker镜像定义里加上cache_from=None,强制全量构建:
docker.Image( "cloud/abcd-svc", build=docker.DockerBuild( context="./path/to/your/docker/dir", cache_from=None ), image_name="1234567890987.dkr.ecr.us-west-2.amazonaws.com/cloud/abcd-svc-4c4ac5e" )
5. 手动指定镜像Digest
如果上面的方法都没用,手动获取镜像digest后硬编码到代码里:
# 推送镜像到ECR docker push 1234567890987.dkr.ecr.us-west-2.amazonaws.com/cloud/abcd-svc-4c4ac5e # 获取镜像digest aws ecr describe-images --repository-name cloud/abcd-svc-4c4ac5e --region us-west-2 --query 'imageDetails[0].imageDigest'
然后在Pulumi代码中指定:
docker.Image( "cloud/abcd-svc", image_name="1234567890987.dkr.ecr.us-west-2.amazonaws.com/cloud/abcd-svc-4c4ac5e", image_digest="sha256:xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" )
内容的提问来源于stack exchange,提问作者user20208419
相关产品推荐
相关产品推荐

