Docker --已定义构建参数,但不是必需的

yx2lnoni  于 2023-03-17  发布在  Docker
关注(0)|答案(3)|浏览(132)

我正在以一种通用的方式构建我的docker映像,以便可以被多个服务使用,但是并不是所有的--build-arg都将出现,因为它取决于GitHub操作所调用的服务。是否可以只使用一个或多个--build-arg,而不使用每个--build-arg
指令:

docker build \
  -f ${{ inputs.docker-location }} \
  -t $IMAGE_NAME:$TAG \
  --build-arg value1=${{secrets.value1}} \
  --build-arg value2=${{ secrets.value2}} \
  --build-arg value3=${{secrets.value3}} \
  --build-arg value4=${{ secrets.value4 }} .

所以在这种情况下,我只传递value 1和value 2,但是,它失败了,因为其余的值将为空。
我知道如果所有参数都存在,它就可以工作,因为我已经在使用它了,但是我想以一种更通用的方式扩展它。
提前感谢!:)

yeotifhr

yeotifhr1#

是否可以只使用一个或多个--build-arg,而不使用每个--build-arg?
是的,您可以通过在Docker文件中定义默认的ARG来完成此操作,例如:

ARG value4=FOO

如需了解更多信息:https://docs.docker.com/engine/reference/builder/#default-values

5lhxktic

5lhxktic2#

在你的管道中检查这些秘密是否为空。如果为空,则给予它一个默认值,你将在Dockerfile中适当地处理它。

lxkprmvk

lxkprmvk3#

我试过几种方法,这一种有效。

docker build -f ${{ inputs.docker-location }} \
          -t $IMAGE_NAME:$TAG \
          --build-arg value1=${{secrets.value1 || 'default_value'}} \
          --build-arg value2=${{ secrets.value2 || 'default_value'}} \
          --build-arg value3=${{secrets.value3 || 'default_value'}} \
          --build-arg value4=${{ secrets.value4 || 'default_value'}} .

另外,如果您不想将任何值当作空值传递,那么您可以不使用默认值,如下所示,管道将忽略空参数。--build-arg value2=${{ secrets.value2}}

相关问题