Jib:如何在未安装的情况下使用amazon-ecr-credential-helper?

如何解决Jib:如何在未安装的情况下使用amazon-ecr-credential-helper?

使用jib-gradle-plugin构建并推送到AWS ECR时,它要求我安装aws ecr credential helper,否则构建会抱怨“系统没有docker-credential-ecr-login CLI”

我想知道是否有一种方法可以在不安装凭证帮助程序的情况下推送到AWS ECR,或者是否可以将可移植版本的凭证帮助程序捆绑在存储库中?

安装帮助程序的问题是:

  1. 这需要在需要构建项目的每台机器上安装帮助程序,从而使构建流程没有我想要的自动化
  2. 要安装aws ecr凭据帮助程序,它需要安装Docker 。有点讽刺意味,因为Jib的主要观点是在构建发生的主机上不需要Docker,因此构建可以是独立的且可移植的。

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

解决方法

最后,全部归结为为Jib提供一个简单的用户名/密码字符串对。 Jib检索到该对后,Jib会直接将用户名和密码字符串文字传递给服务器,而无需进行任何处理。

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

$ docker-credential-gcr get <<<gcr.io
{"ServerURL":"","Username":"... this is the username ...","Secret":"... this is the password ..."}

因此,从理论上讲,您可以编写总是输出一些用户名/密码的哑脚本或二进制文件,将文件命名为docker-credential-my-dumb-script,并配置jib.{from|to}.credHelper='my-dumb-script'。不过我不会这样做。只是为了强调,这仅仅是向Jib提供用户名和密码对。

但是,请注意,许多凭证助手会动态生成短期凭证,这些凭证很快就会过期,这比使用静态和永久凭证安全得多。这是我们通常建议尽可能使用凭据帮助程序的原因之一。

另一个示例是docker login。例如,使用docker login chanseoktest.azurecr.io -u my-username -p my-password成功登录只会导致在my-username中记录my-password~/.docker/config.json

    "auths": {
        "chanseoktest.azurecr.io": {
            # <username>:<password> in PLAIN string in base64 encoded form
            "auth": "bXktdXNlcm5hbWU6bXktcGFzc3dvcmQ="
        },

(如果在bXktdXNlcm5hbWU6bXktcGFzc3dvcmQ=上进行base64解码,则将以纯字符串形式生成my-username:my-password。)这意味着,如果可以使docker pull/push在某些系统上工作,Jib将也可以工作(因为Jib调查了~/.docker/config.json)。因此,向Jib提供凭据的另一种方法是在系统上创建一个有效的~/.docker/config.json(或者您可以从成功运行docker login的另一个系统中复制它)。这种方法,我也不会。

再举一个例子,您可以通过~/.docker/config(也可以通过相应的{{3}进行设置)将凭据直接传递给Jib,而不是使用哑认证助手或间接jib.{from|to}.auth.{username|password}。 },例如-Djib.from.auth.username=...)。只要您可以使用凭据帮助程序,我们也不建议这样做。请注意,如果您在命令行上传递凭据,则同一系统上的其他用户可以看到该命令(包括凭据),更不用说可以记录命令了。

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

还请注意,您认为正确的用户名和密码对可能不是您的注册表实际接受的。例如,该AWS ECR用户FAQ可以使用“ AWS ECR关键用户”(无论使用什么)作为用户名,而实际上,docker-credential-ecr-login返回了AWS作为用户名。 (并不是您总是必须使用AWS作为用户名; ECR可能(也可能没有)具有多种形式的可接受凭据。)

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-