我正在使用这个 docker-compose.yaml 文件在 docker 容器上运行气流。
https://airflow.apache.org/docs/apache-airflow/2.0.2/docker-compose.yaml
我需要在其中一个容器中安装 JRE。如何添加指令以将 java 添加到 docker-compose.yaml 文件?
尝试以下操作:
在您还拥有 docker-compose.yml 的目录中创建以下 Dockerfile:
FROM apache/airflow:2.0.2
USER root
# Install OpenJDK-11
RUN apt update && \
apt-get install -y openjdk-11-jdk && \
apt-get install -y ant && \
apt-get clean;
# Set JAVA_HOME
ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64/
RUN export JAVA_HOME
USER airflow
WORKDIR /app
COPY requirements.txt /app
RUN pip install --trusted-host pypi.python.org -r requirements.txt
为了通过 apt 安装软件包,您必须切换到 root 用户。稍后,我们切换回用户气流。工作目录的规范以及通过requirements.txt安装python包可能不适用,具体取决于您的情况。
然后,在 docker-compose.yml 中,在
build: .
之后添加 &airflow-common
。
最后,使用
docker-compose up -d --build
构建管道。
有关更多信息,请查看此处:https://airflow.apache.org/docs/docker-stack/build.html#building-the-image
您必须构建自己的气流图像。 在您的 Dockerfile 中,您必须安装气流并导出 JAVA_HOME。
Dockerfile 示例:
FROM apache/airflow:2.5.1
USER root
RUN apt-get update \
&& apt-get install -y --no-install-recommends \
openjdk-11-jre-headless \
&& apt-get autoremove -yqq --purge \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
USER airflow
ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
RUN pip install --no-cache-dir apache-airflow-providers-apache-spark==2.1.3
构建命令示例:
docker build -t airflow-with-java .
成功构建镜像后,通过替换气流镜像来编辑 docker-compose:
x-airflow-common:
&airflow-common
image: ${AIRFLOW_IMAGE_NAME:-airflow-with-java}
更多信息您可以在这里查看:https://airflow.apache.org/docs/docker-stack/build.html
我基本上用 Leandro 的答案解决了这个问题,但我需要更高的气流版本。
这是我的 Dockerfile:
FROM apache/airflow:2.9.1
# Install JDK
USER root
RUN apt-get update
RUN apt install -y default-jdk
RUN apt-get autoremove -yqq --purge
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/*
USER airflow
ENV JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64
其他文件与原始答案中相同。