AWS Fargate任务调试,“CannotPullContainerError ...无效参考格式”是什么意思?

时间:2017-12-16 07:25:33

标签: amazon-web-services docker-container aws-fargate aws-ecs

我将docker容器存储在AWS ECR上,使用此容器我创建了Task。当我在Fargate上运行Task时,服务从PROVISIONING>移动。待定(红色)>停止状态。

服务事件或CloudWatch中没有日志。绝对没有办法知道什么是真正的问题。

任何想法移动的方式,AWS文档都没有帮助。

4 个答案:

答案 0 :(得分:4)

我也看到了这个错误。 在我的情况下,问题是我的容器定义中有一个无效的image值。根据{{​​3}}

image说明,该图片通常是repository_url和图片代码

答案 1 :(得分:2)

AWS Fargate缺少一个简单但有天赋的信息,这就是导致您解决问题的原因。让我一步一步解释。

第一步是创建一个任务定义,当你这样做时,你可以定义

 Entry point ["/bin/ls"]
Command     [">","/list.txt","|","echo","/list.txt"]

这与/ bin / ls>等效。 /list.txt | echo /list.txt。

请注意,中间的空格必须用逗号代替。 AWS Farget团队忘记的是在TaskDefinition>中在向导中添加Container部分,这个逗号分隔符echo,helloworld在文本框[![在此处输入图像描述] [1]] [1]中提供。但在任务表单中没有这样的信息。这非常令人困惑。

最后一件事,AWS Fargate的调试信息非常有限。这是我的提示

  • 您只能获得可能的错误 群集>任务> {TaskName}> {container}。出于错误原因。
  • 如果错误非常小,我总是得到错误代码0,Code0之间没有空格。 Cloud上也没有任何东西可以观看。
  • 如果错误文本很大(可能大约是20个char或>),您将在#1和CloudWatch日志中获得它。

希望有所帮助

答案 2 :(得分:1)

以我的经验,您需要在ECR中添加权限。在您的存储库中,有一个标签称为“权限”。添加您认为需要的那些权限。

答案 3 :(得分:0)

正如Marc所说,这通常是错误的DockerHub / repo映像名称。

在我的情况下,这是因为映像名称是由Docker Compose文件中的环境变量计算得出的:

services:
  web:
    image: scipilot/my-web-app:$MY_VERSION_TAG

使用ecs-cli compose service up时我错过了设置环境变量的机会。因此,Fargate可能正试图从Docker Hub中提取“ scipilot / my-web-app:”,因此出现了无效的格式错误。