Amazon ECS 私有 DockerHub 存储库:无法解码提供的 docker 凭据错误

Amazon ECS private DockerHub repo: Unable to decode provided docker credentials error

我在 DockerHub 上有一个私有存储库,我正尝试使用 ECS 进行部署。我总是收到以下错误:

Unable to decode provided docker credentials module="ecs credentials" type="dockercfg"

或者如果我尝试输入 docker:

Unable to decode provided docker credentials module="ecs credentials" type="docker"

我已经尝试了 ECS 开发者论坛上提到的所有可能性。

我试过了:

ECS_ENGINE_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA='{"https://index.docker.io/v1/":{"auth":"<token>","email":"<email>"}}'

我也试过:

ECS_ENGINE_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA='{"https://index.docker.io/v1/":{"username":"<username>","password":"<password>","email":"<email>"}}'

还有(因为 https://godoc.org/github.com/aws/amazon-ecs-agent/agent/engine/dockerauth 的文档):

ECS_ENGINE_AUTH_TYPE=docker
ECS_ENGINE_AUTH_DATA='{"https://index.docker.io/v1/<username>":{"username":"<username>","password":"<password>","email":"<email>"}}'

我也尝试过在 JSON 周围不使用 '' 和使用 "" 。效果相同。我总是得到同样的错误。

我应该补充一点,我正在从一个工作正常的 S3 容器中获取 ecs.config。我还手动重新输入了文件,以防下载文件时出现一些可疑的格式(尽管我不明白这是怎么回事,因为 S3 文件是字节流)。

如果我通过 SSH 进入实例并执行以下操作:

docker login --username=<username> --password=<password> --email=<email>

然后就可以成功拉取镜像了:docker pull A/B:latest

然而,即使在我登录后(因此 docker 生成了 ~/.docker/config.json 文件),我仍然从 ECS 得到同样的错误。

我应该提到更改 ecs.config 文件的所有操作如下:

  1. 将任务数更改为 0
  2. 等待完成
  3. sudo stop ecs
  4. 更改配置文件
  5. sudo start ecs
  6. 将任务数更改为 1

重复...

它变得非常令人沮丧。这应该如何工作或自文档编写以来它有何变化?

如有任何帮助,我们将不胜感激。

编辑

我还尝试在 /etc/ecs/ecs 的 JSON 配置文件中设置 docker 身份验证。config.json:

{
        "EngineAuthType": "docker",
        "EngineAuthData": {
                "https://index.docker.io/v1/": {
                        "username": "<me>",
                        "password": "<password>",
                        "email": "<email>"
                }
        }
}

此处描述了 JSON 配置:https://godoc.org/github.com/aws/amazon-ecs-agent/agent/config. It is also mentioned in the code comments here: https://github.com/aws/amazon-ecs-agent/blob/b197eddd9d5272eeac7dddaa2a84cc4c85522354/agent/engine/dockerauth/doc.go

更具体地说:

These keys may be set by either setting the environment variables "ECS_ENGINE_AUTH_TYPE" and "ECS_ENGINE_AUTH_DATA" or by setting the keys "EngineAuthData" and "EngineAuthType" in the JSON configuration file located at the configured "ECS_AGENT_CONFIG_FILE_PATH" (see http://godoc.org/github.com/aws/amazon-ecs-agent/agent/config)

这又是一次,给出同样的错误...

在花了一些时间查看了 ECS 代理 (https://github.com/aws/amazon-ecs-agent) 的代码后,我意识到了问题出在哪里。问题出在应该删除的电子邮件字段中!

那么,简单回顾一下如何做到这一点:

您需要按照此处的说明进行操作:http://docs.aws.amazon.com/AmazonECS/latest/developerguide/private-auth.html

但是,那里的所有示例都包含电子邮件字段。

ecs.config 应该是这样的:

ECS_ENGINE_AUTH_TYPE=dockercfg
ECS_ENGINE_AUTH_DATA={"https://index.docker.io/v1/":{"auth":"<your auth token>"}}

要在创建实例时从 S3 容器加载 ecs.config,请遵循以下步骤:http://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-agent-config.html,尤其是 "To store an ecs.config file in Amazon S3" 和 "To load an ecs.config file from Amazon S3 at launch" 标题。