我已经使用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"
}
}
}
}
}
aws
凭据放在运行nomad文件的计算机上(使用aws configure
)如何将nomad配置为使用AWS凭据从AWS ECR中提取Docker容器?
答案 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),这样我就不必手动处理凭据。