You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker COPY命令中首个ARG参数值失效问题排查

问题原因及解决方法

问题根源

Dockerfile的变量替换语法中,当变量名后紧跟下划线时,Docker会将变量名与下划线视为一个整体。你写的$swversion_$build会被解析为“变量swversion_的值”加上“变量build的值”,但你并未定义swversion_这个ARG参数,所以该变量被解析为空,最终路径变成test-data/31-linux64-redhat8-testbundle.zip,与实际存在的文件名不匹配,导致COPY报错。

而RUN命令里的echo "swversion $swversion, Build $build"能正常输出,是因为$swversion后面跟的是逗号,不会被当成变量名的一部分,Docker可以正确识别$swversion变量。

解决方法

使用大括号{}包裹ARG变量名,明确变量的边界,让Docker正确识别每个独立变量:

FROM registry.access.redhat.com/ubi8-micro
ARG swversion=25
ARG build=31
RUN set -e; \
    echo "swversion $swversion, Build $build"
    
COPY test-data/${swversion}_${build}-linux64-redhat8-testbundle.zip \
     ./
RUN yum -y install unzip; \
    unzip ${swversion}_${build}-linux64-redhat8-testbundle.zip

修改后,Docker会正确解析${swversion}和${build},拼接出正确的文件名25_31-linux64-redhat8-testbundle.zip,解决COPY和后续unzip命令的路径问题。

内容的提问来源于stack exchange,提问作者shawn1874

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 06:35:08