Dockerfile:Bash 导出语句不起作用

5th*_*5th 1 bash docker dockerfile

我使用 dockerfiles 创建容器。我了解 docker,但我对 bash 的了解非常有限。我知道这个问题可能是重复的,但我不明白要搜索什么。

问题 该步骤RUN export A_NUM=$(echo ${A_VERSION} | head -c 3)不起作用。即使它bash完美地工作。我试过:

  1. 环境ENV A_VERSION=$A_VERSION
  2. 在 bash 中复制我的问题(通过进入内置容器)

exportdockerfile 中的任何声明似乎都是徒劳的 - 有人能解释一下吗?

环境

我有app_A和app_B。当我配置 app_B 时,我需要考虑所选的 app_A 版本。简化的 dockerfile 如下所示:

FROM openjdk:8-jdk-slim

ARG A_VERSION=3.1.3
# RUN install app_A with A_VERSION 
# RUN install app_B
 
WORKDIR /HOME/A_USER
USER A_USER

# RUN set some environment variables for app_A


RUN export A_NUM=$(echo ${A_VERSION} | head -c 3) 
RUN echo $A_NUM

RUN if awk 'BEGIN {exit !('$A_NUM' >= '3.2')}'; then export path_A="/opt/Name_A"; else export path_A="/usr/local/Name_A"; fi 

# RUN Use B_VERSION to set some environment variables for app_B
Run Code Online (Sandbox Code Playgroud)

mou*_*iel 5

每个RUN都是一个单独的 bash 进程,具有自己的环境变量。您必须在一个命令中运行所有 bash 命令RUN

RUN export A_NUM=$(echo ${A_VERSION} | head -c 3) \
    && echo $A_NUM \
    && if awk 'BEGIN {exit !('$A_NUM' >= '3.2')}'; then export path_A="/opt/Name_A"; else export path_A="/usr/local/Name_A"; fi 
Run Code Online (Sandbox Code Playgroud)

此外,您将节省磁盘空间,因为每个RUN都会创建一个图像。