Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将Java与Airflow和Docker结合使用_Java_Docker_Airflow - Fatal编程技术网

将Java与Airflow和Docker结合使用

将Java与Airflow和Docker结合使用,java,docker,airflow,Java,Docker,Airflow,我有一个用例,我想通过Airflow运行一个jar文件,所有这些都必须在Mac上的Docker容器中运行 我尝试过单独安装java,也尝试过将java_HOME(主机)安装到容器上 这是我的docker-compose.yaml: airflow: image: 'puckel/docker-airflow:1.10.9' hostname: airflow container_name: airflow volumes: - ${PWD}/airfl

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

我尝试过单独安装java,也尝试过将java_HOME(主机)安装到容器上

这是我的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
返回
权限被拒绝
。
将其更改为
${JAVA_HOME}/bin/JAVA:/usr/local/bin/JAVA
将返回
exec格式错误


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

我认为您的
权限被拒绝了
,因为您使用用户
气流运行docker

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

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身份运行”是错误的方法。记住,将来可能会有成千上万的人阅读你的答案。在任何地方放置“以根用户身份运行”都要非常小心。@GhostCat true。我猜他在做POC,因为大多数人也不会挂载他们的java。我提出了另一个解决方案——在容器中安装java。不管怎样-我会在我的回答中澄清
root
问题-谢谢!我想为什么安装不起作用。我正在使用MacOS,这就是为什么我的机器上安装的Java与Docker(在OSX主机上使用Debian)所需的Java不同的原因。