如何解决为什么 docker 将旧代码推送到远程服务器
我已经尝试将新构建的映像推送到 ECR,但它似乎总是不断地将旧代码从缓存推送到 ECR。我尝试使用以下命令清除缓存并重建图像,但问题仍然存在:
- 清除泊坞窗
docker rmi $$(docker images | grep none | awk '{print $$3}') -f
docker system prune -a -f
- 重建镜像
docker build -t $(DOMAIN)/$(REPO_NAME):$(IMAGE_VERSION) -f docker/Dockerfile . --no-cache
- 将图像推送到 ECR
docker push $REPO_ID.dkr.ecr.$REGION.amazonaws.com/$(DOMAIN)/$(REPO_NAME):$(IMAGE_VERSION)
我已经在本地测试了构建的映像,它可以与新代码一起使用。但是,当我远程运行图像时,它运行旧代码并失败
我不知道发生了什么。有人可以帮我吗?
解决方法
我已经解决了这个问题。我需要通过以下方式更新函数图像:
aws lambda update-function-code --function-name my-lambda-func --image-uri $REPO_ID.dkr.ecr.$REGION.amazonaws.com/$(DOMAIN)/$(REPO_NAME):latest
,
您没有明确说明您在何处/如何“远程”运行该映像。可能是您正在重复使用标签并且这些图像缓存在您要部署到的“远程”节点上(例如 EKS 集群或 ECS/EC2 集群)?在这种情况下,根据主机配置/状态,如果节点(认为已经)发现缓存的相同图像,它甚至可能无法到达 ECR 以拉取新图像。
[更新] 根据评论,问题发生在 Lambda 函数中,this blog 提示了如何更新 Lambda 中的代码。
,乍一看,问题在于两个图像的名称(也称为标签)不匹配:
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
相反。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。