nomad:使用AWS Access和密钥从ECR中提取docker镜像

时间:2017-08-14 07:47:05

标签: amazon-iam amazon-ecr nomad

我的问题

我已经使用Dockerhub中的默认Redis映像在AWS上成功部署了一些带有几十个Redis Docker容器的游牧工作。

我稍微更改了nomad init创建的默认配置文件,以更改正在运行的容器数量,并且所有内容都按预期工作

问题是我想要运行的实际图片是ECR,这需要AWS权限(访问权限和密钥),而且我不知道如何发送这些权限。

代码

job "example" {
  datacenters = ["dc1"]
  type = "service"
  update {
    max_parallel = 1
    min_healthy_time = "10s"
    healthy_deadline = "3m"
    auto_revert = false    
    canary = 0
  }    
  group "cache" {
    count = 30    
    restart {
      attempts = 10
      interval = "5m"    
      delay = "25s"    
      mode = "delay"
    }    
    ephemeral_disk {    
      size = 300
    }    
    task "redis" {
      driver = "docker"    
      config {

    # My problem here

    image = "https://-whatever-.dkr.ecr.us-east-1.amazonaws.com/-whatever-"
        port_map {
          db = 6379
        }
      }
      resources {
        network {
          mbits = 10
          port "db" {}
        }
      }
      service {
        name = "global-redis-check"
        tags = ["global", "cache"]
        port = "db"
        check {
          name     = "alive"
          type     = "tcp"
          interval = "10s"
          timeout  = "2s"
        }
      }
    }
  }
}

我尝试了什么

  • 广泛的Google搜索
  • 阅读the manual
  • aws凭据放在运行nomad文件的计算机上(使用aws configure

我的问题

如何将nomad配置为使用AWS凭据从AWS ECR中提取Docker容器?

2 个答案:

答案 0 :(得分:0)

我不使用ECR,但如果它像普通的docker注册表一样,这就是我为我的注册表所做的事情,并且它可以工作。假设前面的句子,它也适合你:

config {
                image = "registry.service.consul:5000/MYDOCKERIMAGENAME:latest"
                auth {
                    username = "MYMAGICUSER"
                    password = "MYMAGICPASSWORD"
                }
            }

答案 1 :(得分:0)

对您来说太晚了,但是aws ecr无法按照docker期望的方式处理身份验证。在这里您需要运行sudo $(aws ecr get-login --no-include-email --region ${your region}),运行返回的命令实际上会以符合docker的方式进行身份验证

请注意,如果配置了aws cli,则区域是可选的。就我个人而言,我在框中分配了一个IAM角色(允许执行ecr pull / list / etc),这样我就不必手动处理凭据。