Dockerfile中ENV指令获取命令执行结果赋值环境变量方法
Dockerfile中设置命令执行结果为环境变量的实现方法
Dockerfile的ENV指令仅支持静态键值对配置,不会解析shell命令替换语法,直接写$(which libreoffice)会被识别为普通字符串,无法拿到命令执行的返回值。
根据使用场景可选择以下两种实现方案:
方案1:构建阶段固定路径
适合libreoffice安装后路径不会变动的场景,在安装完依赖后直接将获取到的路径写入全局环境配置,后续镜像构建流程、容器运行时均可读取到该变量:
# 以Debian/Ubuntu系基础镜像为例 RUN apt update && apt install -y --no-install-recommends libreoffice && \ echo "LIBREOFFICEPATH=$(which libreoffice)" >> /etc/environment
注意:不要单独在
RUN指令内执行export LIBREOFFICEPATH=$(which libreoffice),该导出操作仅在当前RUN启动的临时shell进程内生效,进程退出后变量就会丢失,无法持久化到后续镜像层与容器环境。
方案2:容器启动时动态获取路径
兼容性最强,适合担心后续libreoffice升级、安装位置变化导致路径失效的场景,通过入口脚本在容器每次启动时动态获取最新有效路径:
- 编写入口脚本
entrypoint.sh:
#!/bin/bash export LIBREOFFICEPATH=$(which libreoffice) exec "$@"
- 在Dockerfile中添加对应配置:
# 前置步骤:完成libreoffice安装 COPY entrypoint.sh /usr/local/bin/ RUN chmod +x /usr/local/bin/entrypoint.sh ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
内容的提问来源于stack exchange,提问作者Ivan Bacher
相关产品推荐
相关产品推荐

