如何在 dockerfile 中的字符串中定义和使用环境变量?

时间:2021-06-15 14:18:33

标签: docker dockerfile

我们的目录包含 dagsplugins 子目录。我们已经尝试了一个小时来使 Dockerfile 正常工作:

...
# Set AIRFLOW_HOME
ENV AIRFLOW_HOME="/root/airflow"

# Create airflow directory to populate it with dags
RUN mkdir -vp $AIRFLOW_HOME
## Import dags
ADD dags '${AIRFLOW_HOME}/dags'
ADD plugins '${AIRFLOW_HOME}/plugins'
...

无论我们尝试什么,都不会在指定路径下创建 dagsplugins 子目录。直到我们这样做:

ADD dags ${AIRFLOW_HOME}'/dags'
ADD plugins ${AIRFLOW_HOME}'/plugins'

I.E.从字符串括号下删除了 ${AIRFLOW_HOME} ......为什么会这样?你能解释一下我们做错了什么吗?

1 个答案:

答案 0 :(得分:1)

主要错误是ADD源文件夹必须相对于docker文件上下文路径,所以不能使用绝对路径:

第二个错误是你不能将环境变量传递给一些docker命令,所以你必须使用ARG

这里有一个例子:

ARG AIRFLOW_HOME /root/airflow
WORKDIR ${AIRFLOW_HOME}

## Import dags

ADD dags {{dags target folder under WORKDIR}}
ADD plugins {{plugins target folder under WORKDIR}}

并记住将 dagsplugins 源文件夹放在 docker 上下文路径下。