问题标签 [docker-buildkit]
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.
docker - 缺少来自 linux/arm64 平台的 /v8 变体
我将 buildx 用于我的多架构 Docker 构建。
基础镜像作为其 OS/archs 之一,但生成的镜像 ( python:3.8.5-alpine
)缺少变体,在其清单中创建了一个镜像。linux/arm64/v8
corralpeltzer/newtrackon
/v8
linux/arm64
我对这种差异感到困惑。它会产生兼容性问题吗?我应该尝试用 强制变体docker manifest annotate
吗?
有关更多详细信息,请在GitHub 操作中运行。这是 buildx 命令的一部分:
这个问题似乎来自 buildx 构建器可用的拱门:
docker - 通过 buildx 将缓存推送到不安全的注册表
如何将缓存推送到不安全的注册表?我已经将它添加到我的 docker 配置中,并且可以通过docker login
. 这是我的码头工人命令:
并得到错误信息:
我试图添加--output=type=image,push=true,registry.insecure=true
但同样的错误。也尝试添加--allow security.insecure
但得到:failed to solve: rpc error: code = Unknown desc = granting entitlement security.insecure is not allowed by build daemon configuration
Docker版本:Docker版本19.03.8,构建afacb8b
谢谢大家。
docker - 在 GitLab CI 中使用 BuildKit 和挂载的`/var/run/docker.sock`
我有gitlab-runner
一个docker
执行人注册。当它运行时.gitlab-ci.yml
:
并/var/run/docker.sock
安装,它失败了:
当我包括
并.gitlab-ci.yml
删除/var/run/docker.sock
挂载(因此将守护进程更改为子容器而不是主机的),它成功了。
这是Dockerfile
:
是否与 BuildKit / 实验语法和使用主机的 docker 套接字不兼容?我让它通过使用自己的套接字与子容器一起工作dind
,但我希望通过安装套接字来成功。
docker - 在并行 buildkit 构建后手动组织 overlay2 docker 层
我正在使用带有 buildkit 和多阶段构建的 docker 来并行创建许多 conda 环境,然后将它们复制到我的最后阶段。许多层具有大量复杂的依赖关系,并且将每个环境复制到最后阶段需要很长时间。
一个例子:
我知道中间层没有重叠的文件,并且希望将它们直接“挑选”到最后阶段的历史记录中,而无需使用COPY --from=...
命令。使用 docker 或 buildkit 工具可以进行这种类型的低级 overlay2 操作吗?
docker - Docker BuildX 图像未在 docker image ls 中显示
我目前正在尝试使用 BuildKit/BuildX 构建多平台映像(x86_64、arm64、armv7、armv6),并且似乎构建成功,但我似乎无法找到映像所在的位置。它与我之前为 x86_64 构建的版本相比并没有改变,当尝试将它推送到我的仓库时,它说所有层都已经存在,并且只有一个平台存在。我用来构建图像的命令是:
构建后我从终端得到的最后一行是:
docker - 无根 buildkitd 在容器内引发权限错误
我决定使用无根版本的 Buildkit 从 Kubernetes 的容器中构建 Docker 映像并将其推送到 GCR(Google Container Registry)。
我偶然发现了这个错误:
我正在buildkitd
作为deployment
链接到buildkit 文档service
指定的链接运行
这些资源在托管在 Google Kubernetes Engine 上的 Kubernetes 集群中运行。
我正在使用以下 YAML 进行部署和服务
它与没有设置 TLS 证书的buildkit 文档相同。
然后,我在另一个 Pod 中使用以下命令联系 Buildkit Daemon:
buildkitd
容器成功接收请求但抛出上述错误。
该buildctl
命令的输出如下:
这是守护程序的错误。
令我印象深刻的是,我能够使用完全相同的 YAML 文件在集群buildkitd
内进行容器化:minikube
我在内部部署服务和部署,minikube
并使用以下命令转发服务端口,以便能够访问外部部署minikube
。
通过该设置,我可以buildctl
毫无问题地执行我的命令(图像构建并推送到 GCR)。
我想了解为什么它可以在 Google Kubernetes Engine 上运行minikube
而不是在 Google Kubernetes Engine 上运行。
如果有任何帮助,这是容器启动日志
docker - 正常构建时如何忽略docker buildkit标志
我有一个 docker 容器,有时我想用buildkit构建它,其他时候用标准 docker build 构建。假设我们有一个容器,例如:
--mount=type=ssh
当我们从我们的私有存储库 pip 安装东西时,我们使用该标志告诉 buildkit 在此处使用 ssh 密钥。当您使用 Buildkit 使用以下命令进行构建时,一切正常:
但是,我们不能再使用标准 docker 命令构建这个容器,例如:
因为--mount
无法识别标志。无论如何都可以使用相同的 Dockerfile 而不用 buildkit 和通常编辑它?可以告诉 Docker 忽略这些标志吗?
docker - 为什么 docker-compose build 运行我的步骤两次?
我正在使用带有 Dockerfile 的多阶段构建,如下所示:
我也有一个像这样的 docker-compose.yml:
这里涉及的两个图像,web-client
是server
完全独立的。我想利用多阶段构建并行化。
当我运行时docker-compose build
(我在 docker-compose 1.27.4 上),我得到这样的输出
请注意,我的测试 ( npm run test:ci
) 运行了两次(服务器目标的步骤 6/24,然后 Web 客户端目标的步骤 6/11 再次运行)。我想了解为什么会发生这种情况,但我想这不是一个大问题,因为至少它在第二次进行测试时被缓存了。
当我尝试并行运行构建时,这将成为一个更大的问题。现在我得到这样的输出:
很明显,测试现在运行了两次,因为现在我正在并行运行构建,它们没有机会缓存。
谁能帮我理解这一点?我认为 docker 多阶段构建的优点之一是它们是可并行的,但这种行为对我来说没有意义。我有什么误解?
注意 我还尝试为 docker-compose 启用 BuildKit。我很难理解输出。我不相信它会运行两次,但我也不确定它是否在并行化。我需要更深入地研究它,但我的主要问题是:我希望了解为什么多阶段构建不会以我期望的方式在没有BuildKit 的情况下并行运行。
docker - “docker build”只需要 1 个参数
我只想从不同的目录构建一个 dockerfile,我尝试了以下命令
docker build -f C:/Users/XXXX/XXXX/XXXX/XXXX/XXXX/Dockerfile
和
docker build -f C://Users/XXXX/XXXX/XXXX/XXXX/XXXX/Dockerfile
它们都产生相同的错误
"docker build" requires exactly 1 argument.
我错过了什么吗?
docker - Travis CI 上的 Docker buildx
我正在尝试在我们的企业 Travis CI 实例上通过 Docker Buildx 和 Buildkit 为平台 ppc64le 构建映像。
.travis.yml:
构建将因错误而失败:
看起来 Buildx 扩展未启用,但 Docker 信息将显示 Experimental_cli 已启用。
关于如何在 Travis 上启用 buildx 的任何想法?