标签: buildx

如何将多架构 Docker 镜像复制到不同的容器注册表?

有一种众所周知的方法可以将 Docker 镜像从一个容器注册表复制到另一个容器注册表。如果原始注册表是 dockerhub,典型的工作流程将如下所示:

docker pull <image:tag>
docker tag <image:tag> <new-reg-url/uid/image:tag>
docker push <new-reg-url/uid/image:tag>
Run Code Online (Sandbox Code Playgroud)

现在,在处理具有多架构层的图像时,您如何执行上述操作?

根据此链接中的信息,您可以依靠buildx构建多架构图像,并且在执行此操作时,您还可以将它们上传到您想要的任何存储库,但是我如何在不必首先构建图像的情况下执行此操作?

看起来buildxcli 不必要地(?)将上传过程与构建过程耦合在一起。有什么建议么?

谢谢!

docker buildx

19
推荐指数
2
解决办法
7560
查看次数

如何使用我的“gha”Docker 缓存来加速 Docker pull 以及在 Github Actions 上构建 Docker?

在 Github Actions 上,当我将新构建的 Docker 镜像放在缓存中时,我希望避免从注册表中提取该镜像(这是我工作中最慢的部分)

我的工作流程是这样的

  1. 构建一个图像(包含我所有的依赖项)
  2. 在上图中运行命令

根据Docker Build Push Action 文档,设置cache-tocache-from指向gha有助于加快步骤 1 的速度。

然而,当我跑步时docker run ghcr.io/org/image:new-tag command,它总是以

Unable to find image 'ghcr.io/org/image:new-tag' locally
new-tag: Pulling from org/image
...
5402d6c1eb0a: Pulling fs layer
...
Run Code Online (Sandbox Code Playgroud)

这大约需要 50 秒(总作业时间约为 75 秒)。

当存在包含此信息的缓存时,这似乎是不必要的,但是我不知道如何告诉我的docker run命令如何使用此缓存,因为据我所知,--cache-from=ghadocker run 没有等效的选项。

当我在 Github Actions 上调用 docker run 时,如何告诉 docker 在 gha 缓存中查找图像?

continuous-integration caching docker github-actions buildx

18
推荐指数
1
解决办法
2758
查看次数

docker buildx 无法在图像列表中显示结果

以下命令不显示输出ubuntu1图像:

docker buildx build -f 1.dockerfile -t ubuntu1 .
docker image ls | grep ubuntu1
# no output
Run Code Online (Sandbox Code Playgroud)

1.docker文件:

FROM ubuntu:latest
RUN echo "my ubuntu"
Run Code Online (Sandbox Code Playgroud)

另外,我无法在其他 docker 文件的语句中使用该图像FROM(两个版本都在我的本地 Windows 机器上):

2.docker文件:

FROM ubuntu1
RUN echo "my ubuntu 2"
Run Code Online (Sandbox Code Playgroud)
docker buildx build -f 2.dockerfile -t ubuntu2 .

#error:
WARNING: No output specified for docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into …
Run Code Online (Sandbox Code Playgroud)

docker docker-build buildx

18
推荐指数
1
解决办法
2万
查看次数

Docker 通过 buildx 使用本地镜像

我正在为在不同架构上运行的 docker 容器构建镜像。由于我无法始终访问互联网,因此我通常只是在有互联网的情况下拉取映像,并且 docker 使用本地映像而不是拉取新映像。当我开始使用 buildx 构建映像后,这似乎不再起作用了。有没有办法告诉docker只使用本地镜像?当我有连接时,docker 似乎会检查是否有可用的新版本,但使用本地(或缓存)图像,正如我期望的那样,无需互联网连接。

$ docker image ls
ros                     galactic          bac817d14f26   5 weeks ago    626MB
Run Code Online (Sandbox Code Playgroud)
$ docker image inspect ros:galactic
...
"Architecture": "arm64",
 "Variant": "v8",
 "Os": "linux",
...
Run Code Online (Sandbox Code Playgroud)

构建命令示例

$ docker buildx build . --platform linux/arm64
WARN[0000] No output specified for docker-container driver. Build result will only remain in the build cache. To push result image into registry use --push or to load image into docker use --load 
[+] Building 0.3s (3/3) FINISHED                                                                                                  
 => [internal] load …
Run Code Online (Sandbox Code Playgroud)

docker buildx

17
推荐指数
1
解决办法
9084
查看次数

是否可以分别推送不同架构的docker镜像?

据我所知docker buildx build --push将用您在--platform参数中指定的图像架构覆盖现有的图像架构。据我了解,在使用buildx. 但是,我知道官方 docker 镜像使用arm64构建农场来构建linux/arm64镜像。这怎么可能?他们只是使用docker pushwithout吗buildx?如果是这样,是否意味着docker push不会覆盖现有架构buildx?如果我想在不同的机器上构建和推送多个架构,最好的方法是什么?

docker docker-buildkit buildx

16
推荐指数
1
解决办法
7412
查看次数

Kaniko 和 BuildKit/Buildx 有什么区别?

据我了解:

  • 它们都是构建容器镜像的工具
  • 构建本身在容器中运行
  • 构建可以在远程节点上进行,例如在 Kubernetes 集群中(KanikoBuildKit
  • 它们都提供高级功能,例如层缓存

我能收集到的差异:

  • 安全模型(Kaniko
  • BuildKit 利用最新的开发成果,例如缓存清单和清单列表
  • BuildKit 支持多种架构

我不清楚的是两组工具之间的重叠程度以及何时应该使用其中一个而不是另一个。例如,这两个工具似乎都很好地涵盖了在 Kubernetes 集群上自托管远程映像构建场的用例。

containers docker kaniko docker-buildkit buildx

15
推荐指数
1
解决办法
7999
查看次数

docker Buildx“错误:BuildKit 已启用,但 buildx 组件丢失或损坏”错误

当我尝试像往常一样使用 Docker 进行 Docker 构建时,我在映像中收到错误消息,并且无法构建。这种情况我该怎么办?顺便说一句,Docker的版本是23.0.1。( https://i.stack.imgur.com/AzgNi.png )( https://i.stack.imgur.com/PIryk.png ) ( https://i.stack.imgur.com/kMF5Y.png

当我卸载 docker buildx 然后 Build 时,我收到其他警告错误,并且 Build 本身可以工作,但无法执行并行处理。我的理想是使用 Buildx 进行并行构建。

docker wsl-2 buildx

12
推荐指数
2
解决办法
2万
查看次数

docker build --platform=linux/amd64 失败:错误:无法解决:清单中的平台不匹配

在 Macbook M2 机器上,我在创建 docker 构建时遇到错误。

这是可以重现错误的最简单的示例:

echo "FROM alpine:latest" | docker build --platform=linux/amd64 --progress=plain -f - . 

Run Code Online (Sandbox Code Playgroud)

错误信息

注意最后一行的错误:

#5 ERROR: no match for platform in manifest sha256:d9ab3e9e8a65da61fb54c3e2471c8fabf787ce49403919bff7eaf10f99e33215: not found
------
 > exporting to image:
------
ERROR: failed to solve: no match for platform in manifest sha256:d9ab3e9e8a65da61fb54c3e2471c8fabf787ce49403919bff7eaf10f99e33215: not found
Run Code Online (Sandbox Code Playgroud)

完整的错误输出:

#1 [internal] load .dockerignore
#1 transferring context: 2B done
#1 DONE 0.0s

#2 [internal] load build definition from Dockerfile
#2 transferring dockerfile: 93B done
#2 DONE 0.0s

#3 [internal] …
Run Code Online (Sandbox Code Playgroud)

docker buildx

11
推荐指数
1
解决办法
1万
查看次数

在linux/amd64主机上构建linux/arm64 docker镜像

我正在运行一个 Jenkins Alpine Linux AMD64docker 映像,该映像是我自己构建的,并希望linux/arm64为其添加 docker buildx 支持,以便生成多平台映像,但我不知道它应该如何工作。

当我检查支持的平台时,我得到:

+ docker buildx ls
NAME/NODE DRIVER/ENDPOINT STATUS  PLATFORMS
default * docker                  
  default default         running linux/amd64, linux/386
Run Code Online (Sandbox Code Playgroud)

因为我在 AMD64 映像中。我读到我需要为此安装 qemu,但我不知道 buildx 如何识别它。

该文档对此相对简单: https: //docs.docker.com/buildx/working-with-buildx/

有人知道如何在 linux/amd64 映像中添加 linux/arm64 构建功能吗?

我现在看到的唯一解决方案是在实际的 arm64 系统上构建映像。

docker buildx

10
推荐指数
1
解决办法
3万
查看次数

Golang 与 docker 镜像内的 CGO 交叉编译

要求:应用程序必须容器化为 docker 镜像,并且需要支持arm64amd64架构。

代码库:它是一个 golang 应用程序,需要使用git2go库,并且必须CGO_ENABLED=1构建项目。最小的可重现示例可以在 github 上找到。

主机:我使用 arm64 M1 mac 和 docker 桌面来构建应用程序,但结果在我们的 amd64 Jenkins CI 构建系统上类似。

Dockerfile

FROM golang:1.17.6-alpine3.15 as builder

WORKDIR /workspace
COPY go.mod go.mod
COPY go.sum go.sum

RUN apk add --no-cache libgit2 libgit2-dev git gcc g++ pkgconfig

RUN go mod download

COPY main.go main.go

ARG TARGETARCH TARGETOS

RUN CGO_ENABLED=1 GO111MODULE=on GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -tags static,system_libgit2 -a -o gitoperations main.go

FROM …
Run Code Online (Sandbox Code Playgroud)

gcc go cgo docker buildx

9
推荐指数
1
解决办法
3037
查看次数