gpt4 book ai didi

docker - Docker-compose找不到Java

转载 作者:行者123 更新时间:2023-12-02 19:08:37 25 4
gpt4 key购买 nike

我正在尝试为名为Tabula的Java库使用Python包装器。我在Docker容器中需要Python和Java镜像。我正在使用openjdk:8python:3.5.3图像。我正在尝试使用Docker-compose构建文件,但它返回以下消息:

/bin/sh: 1: java: not found

当它到达Dockerfile中的 RUN java -version行时。 RUN find / -name "java"行也不返回任何内容,因此我什至找不到Docker环境中Java的安装位置。

这是我的Dockerfile:
FROM python:3.5.3
FROM openjdk:8
FROM tailordev/pandas

RUN apt-get update && apt-get install -y \
python3-pip

# Create code directory
ENV APP_HOME /usr/src/app
RUN mkdir -p $APP_HOME/temp
WORKDIR /$APP_HOME

# Install app dependencies
ADD requirements.txt $APP_HOME
RUN pip3 install -r requirements.txt

# Copy source code
COPY *.py $APP_HOME/

RUN find / -name "java"
RUN java -version

ENTRYPOINT [ "python3", "runner.py" ]

如何在Docker容器中安装Java,以便Python包装器类可以调用Java方法?

最佳答案

该Dockerfile无法工作,因为开头的多个FROM语句并不代表您的意思。这并不意味着您在FROM语句中引用的图像的所有内容最终都会以某种方式在您正在构建的图像中结束,实际上意味着整个docker历史中的两个不同概念:

  • 在Docker的较新版本multi stage builds中,这与您要实现的目标完全不同(尽管如此,但非常有趣)。
  • 在较早的Docker版本中,它使您能够在一个Dockerfile中简单地构建多个镜像。

  • 您所描述的行为使我假设您正在使用这样的早期版本。让我解释一下在此Dockerfile上运行 docker build时实际发生的情况:
    FROM python:3.5.3
    # Docker: "The User wants me to build an
    Image that is based on python:3.5.3. No Problem!"
    # Docker: "Ah, the next FROM Statement is coming up,
    which means that the User is done with building this image"
    FROM openjdk:8
    # Docker: "The User wants me to build an Image that is based on openjdk:8. No Problem!"
    # Docker: "Ah, the next FROM Statement is coming up,
    which means that the User is done with building this image"
    FROM tailordev/pandas
    # Docker: "The User wants me to build an Image that is based on python:3.5.3. No Problem!"

    # Docker: "A RUN Statement is coming up. I'll put this as a layer in the Image the user is asking me to build"
    RUN apt-get update && apt-get install -y \
    python3-pip

    ...

    # Docker: "EOF Reached, nothing more to do!"

    如您所见,这不是您想要的。

    相反,您应该做的是构建单个镜像,在该镜像中您将首先安装运行时(python,java,..),然后安装特定于应用程序的依赖项。您已经在做的最后两个部分,这是如何安装常规依赖项的方法:
    # Let's start from the Alpine Java Image
    FROM openjdk:8-jre-alpine

    # Install Python runtime
    RUN apk add --update \
    python \
    python-dev \
    py-pip \
    build-base \
    && pip install virtualenv \
    && rm -rf /var/cache/apk/*

    # Install your framework dependencies
    RUN pip install numpy scipy pandas

    ... do the rest ...

    请注意,我尚未测试以上代码段,您可能需要调整一些内容。

    关于docker - Docker-compose找不到Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44833938/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com