Debian系列Podman/Docker镜像使用ARG时sha256sum --check执行异常问题
问题根因
Docker/Podman 中的 ARG 存在作用域限制:在 FROM 语句之前定义的全局 ARG 仅对所有 FROM 语句本身生效,进入对应镜像的构建阶段后,这些全局 ARG 会自动失效,无法直接在后续的 RUN、COPY 等指令中插值使用。
你之前的写法中,NEOVIM_VERSION、NEOVIM_SHA256 都属于全局 ARG,进入 Debian 镜像构建阶段后变量值为空,echo 输出的内容不满足 sha256sum 要求的「哈希值+两个空格+文件名」格式,因此抛出校验格式错误。Ubuntu 镜像场景能正常运行,是因为你之前编写的 Ubuntu 镜像 Containerfile 中,在 FROM 之后重新声明过对应的 ARG 变量。
修复方案
在 FROM 语句之后、使用变量的 RUN 语句之前,重新声明需要用到的 ARG 即可,不需要重复赋值,会自动继承全局 ARG 的默认值,也支持构建时通过 --build-arg 覆盖。
修复后完整 Containerfile 示例:
# 全局ARG,仅作用于FROM行 ARG DEB_RELEASE=bullseye ARG AZ_FUNC_VERSION=4 ARG NEOVIM_VERSION=v0.5.1 ARG NEOVIM_SHA256=1cfbc587ea5598545ac045ee776965a005b1f0c26d5daf5479b859b092697439 FROM docker.io/library/debian:${DEB_RELEASE} # 重新声明需要在当前构建阶段使用的ARG,继承全局值 ARG NEOVIM_VERSION ARG NEOVIM_SHA256 RUN curl --location --remote-name --url "https://github.com/neovim/neovim/releases/download/${NEOVIM_VERSION}/nvim.appimage" && \ echo "${NEOVIM_SHA256} nvim.appimage" | sha256sum --check --
如果存在多构建阶段,每个阶段需要用到 ARG 都需要在对应阶段内单独重新声明。
内容的提问来源于stack exchange,提问作者FilBot3
相关产品推荐
相关产品推荐

