gpt4 book ai didi

java - Docker 子镜像不会覆盖父镜像的 ENV 值

转载 作者:行者123 更新时间:2023-12-01 16:39:21 26 4
gpt4 key购买 nike

我有一个正在定义的子图像

 ARG MX_HEAP_SET=1024
ARG MN_HEAP_SET=1024
ENV MX_HEAP_SET=${MX_HEAP_SET:-${MX_HEAP_SET}}
ENV MN_HEAP_SET=${MN_HEAP_SET:-${MN_HEAP_SET}}
ENV HEAP_SET="-Xmx${MX_HEAP_SET}m -Xms${MN_HEAP_SET}m"
ENV HEAP_SET=${HEAP_SET:-${HEAP_SET}}

并期望替换默认值HEAP_SET它被放置在基础图像中。因此,当我运行没有任何 MX 或 MN 值的基础镜像时,它可以正常工作。

但是,一旦我使用 docker run -e MX_HEAP_SET=2048 运行子图像, ,我仍然在容器中看到默认值。

但是一旦我运行 d ocker run -e HEAP_SET="-Xmx2048m -Xms1024m"我看到了变化。那么,如何使用单独的 MAX 和 MIN 参数而不是字符串来实现相同的行为?

还有其他方法可以达到这个目的吗?

最佳答案

当您使用以下内容时

ARG MX_HEAP_SET=1024

这意味着您正在添加构建时间参数。这只能在 docker 构建期间被覆盖。您需要的是启动 bash 文件

/app/start.sh

#!/bin/sh

# export all variables from here on
set -a

MX_HEAP_SET=${MX_HEAP_SET:-1024}
MN_HEAP_SET=${MN_HEAP_SET:-1024}
MX_HEAP_SET=${SDC_MX_HEAP_SET:-${MX_HEAP_SET}}
MN_HEAP_SET=${SDC_MN_HEAP_SET:-${MN_HEAP_SET}}
HEAP_SET="-Xmx${MX_HEAP_SET}m -Xms${MN_HEAP_SET}m"
HEAP_SET=${HEAP_SET:-${HEAP_SET}}
exec "<yourstarting command>" $@

这将尊重您在运行图像本身时提供的环境变量

但是您需要确保覆盖 ENTRYPOINTCMD 才能运行 /app/start.sh

exec 用于最后确保运行的程序用自身替换 shell 进程

关于java - Docker 子镜像不会覆盖父镜像的 ENV 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61897326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com