问题标签 [kaniko]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
974 浏览

skaffold - 带有 kaniko 的 skaffold:注册表地址未解析

我已将注册表服务部署到命名空间中registry

服务:

这是我的skaffold.yaml

一切正常,直到 kaniko 试图将图像推送到上面的注册表:

Get "http://registry-docker-registry.registry.svc.cluster.local:5000/v2/": dial tcp: lookup registry-docker-registry.registry.svc.cluster.local on 127.0.0.53:53: no such host

Skaffold 命令是:

这是日志:

在 kaniko Pod 运行的同时,我已经能够执行一些操作:

所以它似乎能够连接到它,但在日志中说它无法连接到它。

关于如何访问部署在同一个 kubernetes 中的这个注册表的任何想法?

我试图从另一个 pod 访问注册表:

如您所见,它能够访问注册表。

我还查看了容器/etc/resolv.conf

我还检查了容器运行期间的连接:

如您所见,该容器似乎能够与egistry-docker-registry.registry.svc.cluster.local:5000. 但是,当它尝试将其推送到注册表时,会出现错误日志...

这真的很奇怪。

0 投票
0 回答
621 浏览

spring-boot - SpringBoot 的 bootBuildImage 与 Kaniko 而不是 Docker 守护进程

./gradlew bootBuildImageSpringBoot 2.3 引入了通过运行而不是Dockerfile执行来创建 OCI/Docker 镜像的功能docker build .

在 Kubernetes 集群中运行的 Gitlab 构建服务器上构建时,没有可用的 Docker 守护程序(出于安全原因,没有 docker-in-docker 服务)。相反,必须使用 Google 的“Kaniko”工具构建和上传图像。

是否有可能以某种方式结合两者,即在没有运行 Docker 守护程序的情况下使用“bootBuildImage”?

0 投票
1 回答
575 浏览

gcloud - 设置gcloud缓存use_kaniko后权限无效?

我在云端构建 Docker 镜像时遇到了一个奇怪的权限错误。我切换到另一台机器,安装了 Gcloud,做了 gcloud init,一切都恢复了。

但是,我注意到在构建图像时,它花费了更长的时间,因为我没有启用 kaniko 缓存(我从这篇文章中了解到:gcloud rebuilds complete container but Dockerfile is the same, only the script has changed

启用此功能后,我尝试重建我的最后一个图像和 bam,同样的错误消息:

任何人都知道为什么在启用 Kaniko 缓存时会失败?我讨厌不使用它,因为当它仍然有效时,它确实减少了创建 docker 映像所需的时间。

0 投票
1 回答
3153 浏览

docker - GitLabCI Kaniko 上共享运行器“错误检查推送权限 - 确保您输入了正确的标签名称”

这个类似的问题不适用,因为我没有使用 Kubernetes 或我自己注册的跑步者。

我正在尝试在我的 GitLabCI 管道中构建一个基于 Ruby 的图像,以便预先安装我的 gem 以供后续管道阶段使用。为了构建这个图像,我试图在 .pre 阶段运行的作业中使用 Kaniko。

这当然是基于官方的 GitLabCI Kaniko 文档

但是,当我运行管道时,此作业会返回错误并显示以下消息:

error checking push permissions -- make sure you entered the correct tag name, and that you are authenticated correctly, and try again: getting tag for destination: registries must be valid RFC 3986 URI authorities: registry.gitlab.com

Dockerfile 路径是正确的,并且通过对 --dockerfile 参数的无效 Dockerfile 路径进行测试,我很清楚这不是问题的根源。

据我所知,我正在使用正确的管道环境变量进行身份验证,并按照文档逐字使用 Kaniko。我正在使用 GitLab 的共享运行器运行我的管道作业。

根据5 月的这个问题评论,其他人遇到了类似的问题,然后在恢复到debug-v0.16.0Kaniko 图像时得到了解决。同样,我将图像名称行更改为,name: gcr.io/kaniko-project/executor:debug-v0.16.0但这导致了相同的错误消息。

最后,我尝试使用此处所示的部署密钥创建一个通用用户来访问注册表。通过 GitLabCI 环境变量项目设置界面,我添加了用户名和密钥对应的两个变量,并在我的流水线脚本中替换了这些变量。这导致了相同的错误消息。

我尝试了这种方法的几种变体,包括将这些自定义变量重命名为“CI_REGISTRY_USER”和“CI_REGISTRY_PASSWORD”(预定义变量)。我还确保这些变量都没有被标记为“受保护”。这些都没有解决问题。

我还尝试逐字运行教程脚本(没有自定义图像标签),这也会导致相同的错误消息。

有没有人最近在使用 Kaniko 在他们的 GitLabCI 管道中构建 Docker 映像方面取得了任何成功?似乎其他人也遇到了类似的问题,但据我所知,没有提出任何解决方案,我不确定这个问题是否已经结束。请让我知道是否有任何其他信息有助于诊断潜在的问题来源。谢谢大家!

0 投票
1 回答
7069 浏览

docker - 如何在不同的 GitLab CI 阶段执行 kaniko Docker 构建和推送?

我有一个 Dockerfile,我可以在 GitLab CI/CD 管道中使用 kaniko 构建它。目前,buildstage既构建了 Container,又将其推送到了远程 Docker 存储库。

我想利用 CI/CD 管道的阶段概念来构建映像,然后执行自动测试并运行容器安全分析工具(Trivy),然后作为最后一步,如果之前的所有步骤都成功,我想将其推送到注册表:

  1. 构建映像
  2. 执行自动测试(基于创建的图像)
  3. 分析创建图像的安全性(使用 Trivy)
  4. 仅当前面的步骤成功且不重建映像时才将映像推送到注册表

构建和推送镜像的命令是:

有一个选项/命令行标志不执行推送,--no-push还有一个标志--tar-path只生成图像的 tarball。

我将如何结合这些标志和命令来仅创建图像而不将其推送到注册表,因为只有在执行了安全检查时才应该将其推送到那里。然后推送阶段(GitLab CI Job)是什么样子的,尤其是确切的 kaniko 命令行。

如果最后一个推送阶段/作业可以重用先前构建的图像或缓存并且不再重新构建它,那就太好了。 我想 tarball 可以以某种方式使用,但是 kaniko 使用它的标志是什么?还是我只是使用该 tarball 并使用 docker 命令将 tarball 推送到注册表?

0 投票
0 回答
768 浏览

gitlab - Gitlab CI:在 Kaniko Job 中执行自己的脚本

我有以下工作在我的 gitlab-ci.yml 中构建图像

在 before_script 部分中,设置了 env $CONTEXT。$CONTEXT_SCRIPT_PATH 在全局变量部分中设置:

但是如果 Job 正在运行,它就找不到脚本。

它适用于其他工作,那么 Kaniko 是否在某个单独的环境中运行?如何指定正确的路径?

0 投票
0 回答
632 浏览

python - 如何在推送到容器的注册表之前对构建的映像运行测试?

从 gitlab 文档中,这是使用 kaniko 创建 docker 映像的方法:

但我想先运行测试(pytest),然后再将其推送到容器注册表。任何帮助是极大的赞赏。谢谢!

0 投票
1 回答
1031 浏览

google-cloud-platform - 带有 Kaniko 和 gcloud sdk 的 Gitlab 运行器

我想在 Gitlab 上构建 docker 镜像并使用 Kaniko。

当我只有来自 repo 的 Dockerfile 和代码时,它工作得很好。问题开始于在构建之前我想访问 GCP Secret Manager 并获取此构建的值。

我们直接在 Gitlab 上构建图像并将它们存储在 GCR.io 中。

下面的示例 gitlab-ci.yml 配置。当我们使用镜像时:Docker它将工作,因为我们可以使用 curl 等并安装云 sdk。但是对于 Kaniko,这是不可能的。

Kaniko 正在使用busybox,我看不到安装gcp sdk 和访问机密的方法。在 Kaniko executor 之前,有没有人设法使用 gcloud 命令?

0 投票
0 回答
207 浏览

jenkins - 如何在 Kubernetes 集群中使用 HELM 和容器化 Jenkins

我正在 Kubernetes 集群上使用 jenkins、Gitea 和 kaniko 实现 CICD。由于 Jenkins 是容器化的,我们使用 kaniko 构建镜像并将其推送到 GCR 注册表。现在,我需要更新 helm 图表值文件中的最新图像标签,并使用 helm install 在 kubernetes 集群上安装它作为 CD 的一部分。

不知何故,我无法在 jenkins 容器上安装 Helm(它不允许 root),或者 jenkins 中没有可用的 helm 插件。如何继续在 CICD 中使用 helm 和容器化 jenkins。

0 投票
1 回答
1560 浏览

docker - 使用 kaniko 缓存运行 docker build 时,npm run build 未缓存

我正在尝试为 React 应用程序( github repo)加速我的 Google Cloud Build 。因此,我开始按照官方 Cloud Build 文档中的建议使用 Kaniko Cache 。

看来npm install我的构建过程的一部分现在确实被缓存了。但是,我希望npm run build在源文件没有更改时也会缓存它。

我的 Dockerfile:

构建输出:

现在,由于缓存系统的开销,似乎甚至没有速度优势。

我对 Dockerfiles 比较陌生,所以希望我只是在这里遗漏了一个简单的行。