为什么 docker 将旧代码推送到远程服务器

Why is docker pushing old code to remote server

我试过将新构建的映像推送到 ECR,但它似乎总是不断地将旧代码从缓存推送到 ECR。我已尝试使用以下命令清除缓存并重建图像,但问题仍然存在:

docker rmi $$(docker images | grep none | awk '{print $}') -f
docker system prune -a -f
docker build -t $(DOMAIN)/$(REPO_NAME):$(IMAGE_VERSION) -f docker/Dockerfile . --no-cache
docker push $REPO_ID.dkr.ecr.$REGION.amazonaws.com/$(DOMAIN)/$(REPO_NAME):$(IMAGE_VERSION)

我已经在本地测试了构建的图像,它可以与新代码一起使用。但是,当我远程 运行 图像时,它 运行 旧代码失败了

我不知道发生了什么。有人可以帮我解决这个问题吗?

乍一看,问题是两张图片的名称(a.k.a.tag)中存在不匹配

docker build -t $(DOMAIN)/$(REPO_NAME):$(IMAGE_VERSION) -f docker/Dockerfile . --no-cache

docker push $REPO_ID.dkr.ecr.$REGION.amazonaws.com/$(DOMAIN)/$(REPO_NAME):$(IMAGE_VERSION)

所以你应该这样写:

docker build -t $REPO_ID.dkr.ecr.$REGION.amazonaws.com/$(DOMAIN)/$(REPO_NAME):$(IMAGE_VERSION) -f docker/Dockerfile . --no-cache

相反。

你没有明确地说 where/how 你是 运行 “远程”的图像。可能是您正在重复使用标签,并且这些图像缓存在您要部署到的“远程”节点上(例如 EKS 集群或 ECS/EC2 集群)?在那种情况下,根据主机 configuration/state 如果节点(认为已经)发现缓存了相同的图像,它甚至可能无法到达 ECR 来拉取新图像。

[更新] 根据评论,问题出现在 Lambda 函数中,this blog 有关于如何更新 Lambda 中的代码的提示。

我已经解决了这个问题。我需要通过以下方式更新函数图像:

aws lambda update-function-code --function-name my-lambda-func --image-uri $REPO_ID.dkr.ecr.$REGION.amazonaws.com/$(DOMAIN)/$(REPO_NAME):latest