Docker login—password-stdin似乎在PS中被打破了,我可以在CLI中使用密码登录,但不能使用st



我是terraform的新手,这个与docker的整个交易让我发疯,在过去的两天里,我一直在试图使terraform构建一个docker图像,尝试从头开始编写,这是可怕的和不直观的,所以我决定使用一些模块安东·巴班科写的,不用说,如果我在这里没有工作。

然后我尝试第三次重写整个东西,但使用一个带有PS命令的提供程序块来构建和推送映像,而不是依赖terraform来完成,这似乎总是失败。

provisioner "local-exec" {
interpreter = ["PowerShell", "-Command"]
command     = <<EOF
aws ecr get-login-password | docker login https://${local.account_id}.dkr.ecr.${local.region}.amazonaws.com/v2/ -u AWS --password-stdin 
cd docker
docker build -t ${local.image_name}:${local.image_tag} . 
docker push ${local.image_name}:${local.image_tag}
EOF
}
}

当我单独尝试时:(是的,我的实际变量仅用于编辑个人信息,正确的信息存在于实际请求中)

aws ecr get-login-password | docker login https://*my actual account id*.dkr.ecr.*my actual region*.amazonaws.com/v2/ -u AWS --password-stdin 

输出:

Error response from daemon: login attempt to https://*my actual accout id*.dkr.ecr.*my actual region*.amazonaws.com/v2/ failed with status: 400 Bad Request

AWS ECR返回正确的密码,但不知什么原因——password-stdin没有正确捕获它,有些东西坏了。

因为当我尝试:

aws ecr get-login-password | docker login https://*my actual account id*.dkr.ecr.*my actual region*.amazonaws.com/v2/ -u AWS -p *my actual pw*

输出:

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Login Succeeded

我也试过:

aws ecr get-login-password > pw.txt
cat ./pw.txt | docker login -u AWS --password-stdin *my actual account id*.dkr.ecr.*my actual region*.amazonaws.com

也返回400。

如果我只是把密码在代码中,它似乎工作和构建图像,但它不推它出于某种原因,我得到一个错误。Docker似乎是一个学习经验的下行螺旋…

编辑:我似乎误解了docker登录的使用,而不是图像名称,我应该传递一个repo url…愚蠢的我!

${local.image_name} 

应:

${aws_ecr_repository.*my repo*.repository_url}

但不幸的是——password-stdin问题仍然存在。

解决!

解决方案:

我似乎已经明白了,我的方法是错误的。TF通过提供一个数据源来处理ecr验证令牌:
data "aws_ecr_authorization_token" "token" {}
resource "null_resource" "local-image" {
triggers = {
js_file     = filemd5(local.file_loc)
docker_file = filemd5(local.dockerfile_loc)
}
provisioner "local-exec" {
interpreter = ["PowerShell", "-Command"]
command     = <<EOF
docker login ${data.aws_ecr_authorization_token.token.proxy_endpoint} -u AWS -p ${data.aws_ecr_authorization_token.token.password}
cd docker
docker build -t ${aws_ecr_repository.my-repo.repository_url}:${local.image_tag} .
docker push ${aws_ecr_repository.my-repo.repository_url}:${local.image_tag}
EOF
}
depends_on = [
data.aws_ecr_authorization_token.token
]
}

这可以完美地工作,并且data.aws_ecr_authorization_token.token.password被设置为sensitive并且从控制台输出中正确地编辑。

相关内容

最新更新