Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services “怎么做?”;最新;ECS任务定义中的标记工作和从ECR提取的容器实例?_Amazon Web Services_Docker_Amazon Ecs_Amazon Ecr - Fatal编程技术网

Amazon web services “怎么做?”;最新;ECS任务定义中的标记工作和从ECR提取的容器实例?

Amazon web services “怎么做?”;最新;ECS任务定义中的标记工作和从ECR提取的容器实例?,amazon-web-services,docker,amazon-ecs,amazon-ecr,Amazon Web Services,Docker,Amazon Ecs,Amazon Ecr,我在ECR任务定义中使用latest标记时遇到问题,其中image参数的值类似于xxxxxxxxxx.dkr.ECR.us-east-1.amazonaws.com/reponame/web:latest 我希望在容器实例(注册到集群的EC2实例)上运行新服务实例(任务)后,此任务定义将从ECR中提取一个带有latest标记的映像 然而,在我的例子中,当我远程连接到容器实例并列出docker映像时,我可以看到它没有从ECR中提取最新版本的映像 最新标签当前版本后面有两个发布版本,从我更新任务定义

我在ECR任务定义中使用
latest
标记时遇到问题,其中
image
参数的值类似于
xxxxxxxxxx.dkr.ECR.us-east-1.amazonaws.com/reponame/web:latest

我希望在容器实例(注册到集群的EC2实例)上运行新服务实例(任务)后,此任务定义将从ECR中提取一个带有
latest
标记的映像

然而,在我的例子中,当我远程连接到容器实例并列出docker映像时,我可以看到它没有从ECR中提取最新版本的映像

最新标签当前版本后面有两个发布版本,从我更新任务定义到使用显式定义版本标签的
最新
标签实例,即
:v1.05

我在这个集群上只有一个容器实例

在我的过程中可能有一些怪癖,但这个问题主要是关于这个
最新的
在这种情况下应该如何表现

我的docker镜像构建和标记、ECR推送、ECS任务定义更新和ECS服务更新流程:

#使用多个标记构建图像
docker构建-t reponame/web:latest-t reponame/web:v1.05。
#用ECR repo URI标记图像
docker标签${imageId}xxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/reponame/web
#分别按下两个标签
docker push xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/reponame/web:v1.05
docker push xxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest
#仅当定义文件的内容已更新时运行
aws ecs注册任务定义--cli输入jsonfile://web-task-definition.json
#使用force new deployment更新服务
aws ecs更新服务\
--群集我的群集名称\
--服务网站\
--任务定义网站\
--部队新部署
使用任务定义文件:

{
“家庭”:“网络”,
“集装箱定义”:[
{
“名称”:“网络”,
“图片”:“xxxxxxxxxxx.dkr.ecr.us-east-1.amazonaws.com/reponame/web:latest”,
“必要”:正确,
“记忆”:768,
“memoryReservation”:512,
“cpu”:768,
“端口映射”:[
{
“集装箱港口”:5000,
“主机端口”:80
}
],
“入口点”:[
“纱线”,“开始”
],
“环境”:[
{
“名称”:“主机”,
“值”:“0.0.0.0”
},
{
“名称”:“NUXT_主机”,
“值”:“0.0.0.0”
},
{
“名称”:“NUXT_端口”,
“值”:“5000”
},
{
“名称”:“节点环境”,
“价值”:“生产”
},
{
“名称”:“API_URL”,
“值”:“/api”
}
]
}
]
}

原来问题出在我的脚本上。正在使用另一个变量,该变量的旧值仍存储在终端会话中

我已经验证了,通过在任务定义的图像源url中使用
latest
标记,确实有一个新启动的服务实例从ECR中拉入带有
latest
标记的图像

无需注册任务定义的新修订版


另外,在处理
latest
标记时需要小心。在这种情况下,这似乎是可行的,但在许多其他情况下,这很容易出错:,

构建新图像时,必须标记并推送
最新的
,否则标签将不会在注册表上更新。

还有一个选项可以在运行图像时强制拉取,这样docker主机就不会因为昨天拉取了
latest
,而认为今天仍然应该尝试拉取
latest

能否显示
web任务定义.json
文件?您的docker构建是否会产生与之前两个版本相同的映像(repo sha256)?最新的标记从一个图像移动到另一个图像,但如果代码也返回到同一点,则可以返回。@jogold我已编辑了我的问题,以包括任务定义文件。@jogold您似乎是正确的,这些版本的sha256摘要是相同的。这很奇怪,因为我在Dockerfile中使用了COPY语句,并且文件夹的内容已经更改,至少在一个文件(package.json)中,而该文件不在.dockerginoreok中,这至少验证了部署脚本/方法。