首页 > 解决方案 > 将 docker 映像推送到 aws ecr 和 bash 脚本

问题描述

我正在尝试将图像在一行中推送到 aws ecr,因此无需手动干预。我认为这有效,但今晚没有。我认为这会获取第一个命令的输出并将其作为一个命令单独执行,然后在完成后执行第三个命令。

aws ecr get-login --no-include-email --region us-west-2 | bash | docker push XXYYXXYYXXYY.dkr.ecr.us-west-2.amazonaws.com/test-sns-stack

第一个命令的输出是这种形式:

docker login -u AWS -p eyJwYXlsb2FkIjoicldnSWpITlpFZGhWQW1BdG1hcDB4SmYxYm9QbllTL0ZrVi9USWx0cTlnVUxtc1dpOVFVeW1MT2RLNy9tZmZCZ2l0SW9WRFBSRG1EWmxLYWozOGVwRXJqMy9TTW5oQUwxVWVBSHUrZFZCcEN0ZU1wTnVoVmdaa3BjQm14aWszTWRw....

当我手动运行 aws ecr login..., docker login -u .... docker push... 我们很好。

但是运行单线显然无法登录。在我看来(!)好像它没有等到命令执行。

重击不是我的强项。

标签: bashdockeramazon-ecr

解决方案


该文档警告使用get-login

当您执行此 docker login 命令时,系统上的其他用户可以在进程列表 (ps -e) 显示中看到该命令字符串。由于 docker login 命令包含身份验证凭据,因此您系统上的其他用户可能会以这种方式查看它们。他们可以使用凭证来获得对您的存储库的推送和拉取访问权限。如果您不在安全系统上,则应使用如上所述的 ecr get-login-password 命令。

最佳做法是使用get-login-password相同的文档说:

aws ecr get-login-password --region region | docker login --username AWS --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com

现在,docker push您要执行的命令只有在登录成功时才有意义。这可以使用&&运算符来实现。使用您的示例,完整的行将是:

aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin XXYYXXYYXXYY.dkr.ecr.us-west-2.amazonaws.com && docker push XXYYXXYYXXYY.dkr.ecr.us-west-2.amazonaws.com/test-sns-stack

您可以在此答案中阅读有关&&运营商和其他人的更多信息。


推荐阅读