Docker Jib:如何在不安装的情况下使用AmazonECR凭证助手?

Docker Jib:如何在不安装的情况下使用AmazonECR凭证助手?,docker,gradle,amazon-ecr,jib,aws-credentials,Docker,Gradle,Amazon Ecr,Jib,Aws Credentials,当使用构建并推送到AWS ECR时,需要我安装,否则构建会抱怨“系统没有docker credential ECR login CLI” 我想知道是否有一种方法可以在不安装凭证助手的情况下推送到AWS ECR,或者是否可以在repo中捆绑凭证助手的便携版本 安装帮助程序时出现的问题有: 它要求在需要构建项目的每台机器上安装助手,因此使构建流程不像我希望的那样自动化 要安装aws ecr凭证帮助程序,需要安装Docker。这感觉有点讽刺,因为Jib的一个主要观点是,在构建发生的主机上不需要Dock

当使用构建并推送到AWS ECR时,需要我安装,否则构建会抱怨“系统没有docker credential ECR login CLI”

我想知道是否有一种方法可以在不安装凭证助手的情况下推送到AWS ECR,或者是否可以在repo中捆绑凭证助手的便携版本

安装帮助程序时出现的问题有:

  • 它要求在需要构建项目的每台机器上安装助手,因此使构建流程不像我希望的那样自动化
  • 要安装aws ecr凭证帮助程序,需要安装Docker。这感觉有点讽刺,因为Jib的一个主要观点是,在构建发生的主机上不需要Docker,因此构建可以是自包含的和可移植的

  • 我知道这不是Jib的问题,但我只是希望使用Jib的人可能会遇到类似的挑战,因此可以提供一些解决方法的见解。

    最后,这一切归结为为为Jib提供了一个简单的用户名/密码字符串对。一旦Jib检索到这对密码,Jib就将用户名和密码字符串文本按原样传递给服务器,而不进行任何处理。(顺便说一句,这种机制并不特定于Jib;每个Docker注册表都是这样工作的。)

    使用Docker凭据帮助程序与通过CLI提供此字符串对没有什么不同。任何凭证助手都将使用“get”命令输出用户名和密码。例如,使用Google容器注册表

    $ docker-credential-gcr get <<<gcr.io
    {"ServerURL":"","Username":"... this is the username ...","Secret":"... this is the password ..."}
    
    (如果您在
    bXktdXNlcm5hbWU6bXktcGFzc3dvcmQ=
    上执行base64解码,它将导致
    myusername:mypassword
    为纯字符串。)这意味着,如果您可以使
    docker pull/push
    在某些系统上工作,Jib也将工作(正如Jib查看
    ~/.docker/config.json
    )。因此,向Jib提供凭据的另一种方法是在系统上创建一个工作的
    ~/.docker/config.json
    (或者您可以从另一个成功运行
    docker登录的系统复制它)。对于这种方法,除非可以安全地完成,否则我也不会这样做

    再举一个例子,您也可以通过
    Jib.{from | to}.auth.{username | password}
    (也可以通过相应的with设置,例如,
    -Djib.from.auth.username=…
    )将凭证直接传递给Jib,而不是dumb credential helper或
    ~/.docker/config
    。只要您可以使用凭证帮助器,我们也不建议这样做。请注意,如果在命令行上传递凭据,同一系统上的其他用户可以看到该命令(包括凭据),更不用说命令可以记录或存储在shell历史记录中。在某些环境中,如果您将这些凭据存储在某些环境变量中,并从环境变量中修改
    build.gradle
    pom.xml
    以读取
    jib.{from | to}.auth.{username | password}
    ,则可以减轻此命令行风险

    有关提供用户名/密码对的完整方法列表,请咨询官方

    还要注意,您认为正确的用户名和密码对可能不是您的注册表实际接受的用户名和密码对。例如,该AWS ECR用户表示,他们可以使用“AWS ECR密钥用户”(无论是什么)作为用户名,而实际上,
    docker credential ECR login
    返回了
    AWS
    作为用户名。(并不是说您必须始终使用AWS
    作为用户名;ECR可能(也可能不)具有多种形式的可接受凭证。)

    最后,我将与AWS ECR社区或平台社区确认,如果您无法使用凭证助手,您将使用Jib确定哪种凭证形式最适合作为“登录到Docker”的用户名和密码对。例如,对于GitHub操作,以前我成功地使用了