问题标签 [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 - 如何调试导致在不同工作站上从相同代码库构建的层不同的原因?
在我们的开发工作流程中,我们构建镜像,将它们推送到注册表,然后在暂存集群中从它们部署服务。工作流程因大量图像推送而严重陷入困境,因为在不同工作站上由完全相同的代码库构建的层往往最终具有不同的哈希值。我们确实了解 docker 的工作原理(即一点变化,层发生变化;一层发生变化,所有后续层也发生变化),但我们仍然相信有很多层失效正在发生,我们所做的任何事情都无法解释到我们的代码库或依赖项,并且完全是由于在不同机器上执行的构建。原则上,我们的构建并不太依赖于平台(我们不会将任何东西编译成机器代码),而且这些机器无论如何都是 x86_64 linux 机器。
有哪些工具、策略和最佳实践可以帮助我们调试为什么会发生这种情况并可能缓解这种情况?
(重要提示:我们目前绝对负担不起的一个已知最佳实践是将构建过程转移到可能在云中的单个专用机器上。请不要建议此解决方案)。
docker - 可以从中提取用于 Docker 映像的构建参数吗?
有人声称可以在拉取映像后提取 Docker 映像的构建参数(示例)。
我已经使用以下 Dockerfile 对此进行了测试:
当我构建图像时:
并按照文章中的说明进行检查:
我看不到实际的构建参数(12345
)。
有没有办法从图像中提取构建参数?
如果图像不是在我的机器上构建而是从存储库中提取的,答案会有所不同吗?
我知道Docker 构建秘密功能。但是,我是在专门询问ARG
.
docker - docker BuildKit 不打印 ENV
我正在尝试使用新的 docker 工具包来构建图像,因为我们需要 2 组不同的变量,我的 docker 文件如下所示:
在詹金斯被称为:
但日志没有显示设置 ENV 的行
我们可以看到运行 pip 安装、COPY 但不是 ENV:
但不是当我设置 ENV 时...
这样的:
我错过了什么?还是 ENV 不再显示?还是没有设置?期望在一行中看到如下内容:
amazon-web-services - 在 ECR 中标记多平台图像会创建未标记的清单
我已经开始使用 docker buildx 来标记多平台图像并将其推送到 ECR。但是,ECR 似乎将标记应用于父清单,并将每个相关清单保留为未标记。ECR 似乎确实可以防止删除子清单,但它使管理清理孤立的未标记图像变得复杂。
有没有办法以某种方式标记这些子清单?
例如,考虑这个推送:
检查图像:
显示:
但是,ECR 将 2 个子图像显示为untagged
python - 不使用 BuildKit 时 Docker 'Permission denied'
问题陈述
我有以下内容Dockerfile
:
当我使用 BuildKit ( DOCKER_BUILDKIT=1
) 时,图像成功构建。
当我不使用 BuildKit 时,我收到以下错误:
我试图理解为什么。
额外细节
我曾经strace
跟踪导致错误的系统调用,结果如下:
docker - 构建多架构 Docker 映像时强制架构
似乎 Docker(可能是 qemu)在某些情况下会退回到本机执行,即使架构不相同。例如,qemu 在 x64 上运行时似乎不模拟 x86。例如,当平台设置为 linux/386 时,这会导致我在构建 Docker 多架构映像时出现问题,因为 uname 返回 x86_64。当平台设置为 armv7 并且我在 arm64 上运行时,可能会发生同样的情况。
假设这是正确的:是否可以强制 Docker(或 qemu)模拟确切的拱门?我需要 uname 来返回确切的拱门,否则某些构建过程可能会失败。是否可以禁用此行为(如果暂时更好)?
docker - 如何使用 docker 的 buildkit 缓存
- 主机:MacOS (BigSur 11.5.2)
- 码头工人:18.09
我想使用 buildkit 的缓存。
[ Docker 文件 ]
但是,gradle 构建缓存不起作用。此外,/Users/workspace/.gradle
无法在主机上找到。
- 为什么缓存不起作用?挂载目录有什么特殊情况吗?
- 在主机的挂载目录中找不到缓存的构建数据吗?
docker - 无法解析 ssh:[默认]:stat /tmp/ssh-qpL02JZP5k7x/agent.28198:没有这样的文件或目录
AFAIK错误意味着在提到的目录中没有命名文件agent.28198
,但是在列出其内容后,文件(本地套接字文件)显然就在那里。docker无法获取套接字的原因可能是什么?
这是完整的命令场景: