将Docker映像推送到AWS ECR和Bash脚本

时间:2020-08-16 19:35:53

标签: bash docker amazon-ecr

我正在尝试将图像推送到awr 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 ...我们很好。

但是运行一个线性班轮显然无法登录。对我来说(!)好像没有等待命令执行一样。

不是我的强项。

2 个答案:

答案 0 :(得分:1)

我认为这里的主要问题是围绕bash |的前提。实际通过管道传输的命令实际上是并行运行的,这意味着它们同时启动,但不一定同时完成。

&&替换最后一个管道可能会解决您的问题:

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

答案 1 :(得分:1)

The documentation警告使用get-login

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

最佳做法是使用the same documentation所说的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

您可以在this answer中进一步了解&&运算符和其他运算符。