如何使用Dockerfile和python创建JAVA_HOME set?

2024-05-20 05:27:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试为我的项目设置Dockerfile,但不确定如何在容器中设置JAVA_HOME。在

FROM python:3.6
# Set the working directory to /app
WORKDIR /app
# Copy the current directory contents into the container at /app
COPY . /app
# Install any needed packages specified in requirements.txt
RUN pip install --trusted-host pypi.python.org -r requirements.txt
# Define environment variable
ENV NAME Netflow
# Run netflow.py
CMD ["python", "netflow.py"]

在要求.txt我有。。。在

^{pr2}$

我的netflow.py文件是。。。在

import pandas, math, re, log
from pyspark import SparkConf, SparkContext
from pyspark.sql import SQLContext


conf = SparkConf().setAppName("building a warehouse")
sc = SparkContext(conf=conf)
df=pandas.read_csv(r'Testdataset.csv') 

尝试运行后,终端中的输出是。。。。在

JAVA_HOME is not set
Traceback (most recent call last):
  File "netflow.py", line 7, in <module>
    sc = SparkContext(conf=conf)
  File "/usr/local/lib/python3.6/site-packages/pyspark/context.py", line 115, in __init__
    SparkContext._ensure_initialized(self, gateway=gateway, conf=conf)
  File "/usr/local/lib/python3.6/site-packages/pyspark/context.py", line 298, in _ensure_initialized
    SparkContext._gateway = gateway or launch_gateway(conf)
  File "/usr/local/lib/python3.6/site-packages/pyspark/java_gateway.py", line 94, in launch_gateway
    raise Exception("Java gateway process exited before sending its port number")

我一直在寻找解决办法,但到目前为止没有一个有效。在

我试过了

ENV JAVA_HOME /Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home

我试着用另一个命令

docker run -e "JAVA_HOME=/Library/Java/JavaVirtualMachines/openjdk-11.jdk/Contents/Home" project env

我还是犯了同样的错误


Tags: theinpytxtapphomepackagesconf
2条回答

要设置环境变量,可以在dockerfile中声明它们,如下所示:

ENV JAVA_HOME="foo"

或者

^{pr2}$

实际上,您已经在发布的示例中设置了一个环境变量。在

有关详细信息,请参见documentation。在

您需要在容器中实际安装Java,但我建议您还是找到Pyspark docker映像,或者将Python添加到Openjdk映像中,这样就不需要处理太多的环境变量

更具体地说,JAVA_HOME=/Library/Java/JavaVirtualMachines是一个只能作为Mac路径使用的路径,不应该期望它在Linux容器中工作

然而,当numpy是唯一真正读取数据的东西时,为什么需要Pyspark呢

相关问题 更多 >