Dockerfile中ARG参数无法替换ENV内COMPOSER_AUTH变量值的问题
解决Docker构建参数无法替换ENV中JSON变量的问题
这个问题的核心原因是Docker在处理单引号包裹的字符串时,不会解析其中的环境变量/构建参数,所以你写的${consumer-key}和${consumer-secret}会被当成字面量保留下来,而不是替换成传入的构建参数值。下面给你两种可行的解决方案:
方案一:使用双引号包裹ENV值并转义JSON内部引号
把ENV指令里的单引号换成双引号,同时对JSON结构里的双引号进行转义,这样Docker会先解析替换${}变量,再处理JSON格式:
ARG consumer-key ARG consumer-secret ENV COMPOSER_AUTH "{ \"bitbucket-oauth\": { \"bitbucket.org\": { \"consumer-key\": \"${consumer-key}\", \"consumer-secret\": \"${consumer-secret}\" } } }"
方案二:通过RUN指令设置环境变量
利用Shell的变量替换特性,通过RUN命令来生成并设置COMPOSER_AUTH环境变量,这种方式更直观,不需要处理转义:
ARG consumer-key ARG consumer-secret RUN COMPOSER_AUTH='{ "bitbucket-oauth": { "bitbucket.org": { "consumer-key": "'"${consumer-key}"'", "consumer-secret": "'"${consumer-secret}"'" } } }' && \ echo "COMPOSER_AUTH=$COMPOSER_AUTH" >> /etc/profile.d/composer.sh
验证替换是否成功
构建完成后,你可以进入容器检查环境变量的值,确认参数已正确替换:
docker run --rm -it <your-image> bash echo $COMPOSER_AUTH
内容的提问来源于stack exchange,提问作者yooouuri
相关产品推荐
相关产品推荐

