将Java与Airflow和Docker结合使用
我有一个用例,我想通过Airflow运行一个jar文件,所有这些都必须在Mac上的Docker容器中运行 我尝试过单独安装java,也尝试过将java_HOME(主机)安装到容器上 这是我的docker-compose.yaml:将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:
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不同的原因。