【问题标题】:Set JAVA_HOME for docker in NLTK for Stanford NLP为斯坦福 NLP 的 NLTK 中的 docker 设置 JAVA_HOME
【发布时间】:2017-09-13 02:31:45
【问题描述】:

我是使用 Docker 的初学者。 我正在使用适用于 Windows 7 的 Docker 工具箱,我为我的 python Web 应用程序构建了一个映像,一切正常。

但是,对于这个应用程序,我使用 nltk 模块,它还需要 java 和 java_home 设置到 java 文件。 在我的计算机上运行时,我可以手动设置 java_home,但是如何在 dockerfile 中进行设置,以便在另一台计算机上运行时不会出错。 这是我的错误:

p.s : 下面回答

【问题讨论】:

  • 快速提问:你真的需要 docker 来做 NLTK 吗?
  • 我认为是的,因为我需要在我的公司服务器上部署应用程序,这将使用从 dockerhub 提取图像的方法
  • 有趣...如果您愿意,请说明如果 NLTK 在此问题上托管自包含 docker 图像的要求和理想情况:github.com/nltk/nltk/issues/542

标签: python docker nltk stanford-nlp java-home


【解决方案1】:

当您运行容器时,您可以选择传入环境变量,这些变量将使用-e 标志在您的容器中设置。这个答案很好地解释了环境变量:How do I pass environment variables to Docker containers?

docker container run -e JAVA_HOME='/path/to/java' <your image>

确保您的图像实际上也包含 Java。您可能想在 docker hub 上查看类似 openjdk:8 的图像。

听起来你需要一个 docker 文件来构建你的镜像。查看此处记录的ENV 命令以设置JAVA_HOME var:https://docs.docker.com/engine/reference/builder/#env,然后使用docker build /path/to/Dockerfile 构建您的图像

我看到您已经尝试过了,但运气不佳.. 运行容器,而不是运行您的应用程序进程,只需按照 echo $JAVA_HOME 的行运行一个 bash 脚本,这样您至少可以验证该部分正在工作。

此外,请确保将所需的任何文件/二进制文件复制到 docker 文件中映像内的相应目录中,如下所述。

【讨论】:

  • 他甚至可以在他的 Docker 构建中包含一个“引导”脚本,该脚本调用他的 python 应用程序并设置环境变量
  • 问题是我认为我没有运行容器。我只是将其推送到 dockerhub 并使用另一个应用程序将 docker 映像拉回并将其部署到公司服务器。因此,我只能在构建图像之前对其进行修改,所以我正在寻找一种允许我为图像自动设置 java_home 的方法
  • @NickBrady 即使在没有将实际二进制文件和斯坦福 nlp 目录挂载到 docker 的情况下使用变量,代码也无法访问任何这些资源。
【解决方案2】:

我终于找到了为 dockerfile 安装 java 的方法,它是使用 ubuntu 映像的 java install 命令行。 下面是码头文件。感谢您的阅读。

RUN apt-get update
RUN apt-get install -y python-software-properties
RUN apt-get install -y software-properties-common
RUN add-apt-repository -y ppa:openjdk-r/ppa

RUN apt-get update
RUN apt-get install -y openjdk-8-jdk

ENV JAVA_HOME /usr/lib/jvm/java-8-openjdk-amd64/
RUN export JAVA_HOME

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-26
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 2015-04-30
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多