java - Docker 子图像不会覆盖 Parent 的 ENV 值
问题描述
我有一个正在定义的子图像
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>" $@
这将尊重您在运行图像本身时提供的环境变量
但是你需要确保覆盖你的ENTRYPOINT
orCMD
来运行/app/start.sh
exec
最后用于确保正在运行的程序将shell进程替换为自身
推荐阅读
- android - 颤振 - 在 null 上调用了方法“[]”(解析 json)
- reverse-engineering - ATARI-ST 程序的逆向工程
- git - 将存储库从 Gitlab 迁移到 Azure DevOps
- r - R Markdown:在参数中设置星期的开始日期
- python - 仅在 Heroku 中不受支持的语言环境设置
- linux - 所有操作系统库(给定 linux 发行版)ABI 都兼容吗?
- haskell - Haskell DerivingVia 上的多参数类型类与有趣的 deps
- ios - Swift 版本 NativeScript
- python - 在 Python 中将 PSD 图层导出到 EXR
- python - 默认字典/按分钟排序