【问题标题】:Use Java with Airflow and Docker将 Java 与 Airflow 和 Docker 结合使用
【发布时间】:2020-12-14 11:14:56
【问题描述】:

我有一个用例,我想通过 Airflow 运行一个 jar 文件,所有这些都必须存在于 Mac 上的 Docker 容器中。

我尝试单独安装 java,也尝试将我的 JAVA_HOME(host) 安装到容器上。

这是我的 docker-compose.yaml:

airflow:
    image: 'puckel/docker-airflow:1.10.9'
    hostname: airflow
    container_name: airflow
    volumes:
      - ${PWD}/airflow/dags:/usr/local/airflow/dags
      - ${JAVA_HOME}:/usr/local/bin/java //FWD MOUNTING JAVA_HOME

这样,我在 /usr/local/bin/ 中获得了一个带有数据的 java 目录,但 java -version 返回 Permission denied。 将其更改为 ${JAVA_HOME}/bin/java:/usr/local/bin/java 将返回 exec format error

处理这个用例的正确方法是什么?

【问题讨论】:

    标签: java docker airflow


    【解决方案1】:

    我认为您收到 Permission denied 是因为您正在使用用户 airflow 运行 docker。

    您可以尝试以root 运行它吗? (这是有风险的!不要在生产中使用 - 这只是一种临时解决方法)。避免使用root用户!

    airflow:
        image: 'puckel/docker-airflow:1.10.9'
        hostname: airflow
        container_name: airflow
        user: root
        volumes:
          - ${PWD}/airflow/dags:/usr/local/airflow/dags
          - ${JAVA_HOME}:/usr/local/bin/java
    
    

    编辑: 考虑安装一个单独的 Java,而不是安装本地 Java:

    airflow:
        build:
          context: .
          dockerfile: Dockerfile
        hostname: airflow
        container_name: airflow
        volumes:
          - ${PWD}/airflow/dags:/usr/local/airflow/dags
    

    并在同一目录中添加Dockerfile

    FROM puckel/docker-airflow:1.10.9
    USER root
    RUN mkdir -p /usr/share/man/man1
    RUN apt-get update && apt-get install -y default-jdk && apt-get clean
    USER airflow
    

    【讨论】:

    • 这不起作用。 JAVA_HOME 不是我系统中可执行文件的链接。 JAVA_HOME->bin->java 也是宿主机上的可执行文件。
    • @proprius 您可以挂载可执行文件或在映像中安装 java。我已经编辑了上面的答案
    • 类似,在 99% 的情况下,“以 root 身份运行”的想法是错误的方法。请记住,将来可能会有成千上万的人阅读您的答案。将“以root身份运行”放在任何地方时要非常小心。
    • @GhostCat 是真的。我假设他正在做 POC,因为大多数人也不会安装他们的 java。我建议了另一种解决方案 - 在容器中安装 java。无论如何 - 我会在我的回答中澄清 root 问题 - 谢谢!
    • 我知道为什么安装不工作。我使用的是 MacOS,这就是为什么我的机器上安装的 Java 与 Docker(在 OSX 主机上使用 Debian)所需的不同。
    猜你喜欢
    • 2021-08-22
    • 2016-11-05
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    • 2014-05-17
    • 2016-04-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多