1

我找到了 android sdk 的 dockerfile

FROM openjdk:8

RUN apt-get update && \
    apt-get install -y openjdk-8-jdk wget unzip && \
    rm -rf /var/lib/apt/lists/*

ENV ANDROID_HOME /opt/android-sdk-linux

RUN mkdir -p ${ANDROID_HOME} && \
    cd ${ANDROID_HOME} && \
    wget -q https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -O android_tools.zip && \
    unzip android_tools.zip && \
    rm android_tools.zip

ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools

RUN yes | sdkmanager --licenses

我连接到泊坞窗图像。Apk 构建工作正常。

但是我的项目需要不同的依赖项。另一个dockerfile内容如下:

FROM python:3.7-alpine

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt

它适用于 pyhton 应用程序。

但是,我怎样才能合并这些文件呢?

以下设置不起作用:

FROM openjdk:8

RUN apt-get update && \
    apt-get install -y openjdk-8-jdk wget unzip && \
    rm -rf /var/lib/apt/lists/*

ENV ANDROID_HOME /opt/android-sdk-linux

RUN mkdir -p ${ANDROID_HOME} && \
    cd ${ANDROID_HOME} && \
    wget -q https://dl.google.com/android/repository/sdk-tools-linux-3859397.zip -O android_tools.zip && \
    unzip android_tools.zip && \
    rm android_tools.zip

ENV PATH ${PATH}:${ANDROID_HOME}/tools:${ANDROID_HOME}/tools/bin:${ANDROID_HOME}/platform-tools

RUN yes | sdkmanager --licenses
FROM python:3.7-alpine

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt

我连接泊坞窗图像。Apk 构建失败。错误在这里:

错误:未设置 JAVA_HOME,在您的 PATH 中找不到“java”命令。

4

1 回答 1

0

使用 docker 多阶段构建时,每个阶段都从开始,FROM并且不会累积前一阶段的文件(也没有环境变量),您必须手动复制所需的文件。例如,在下一个 Dockerfile 中,构建的图像将与openjdk:8您的应用程序或 python 相同,并且不会有。

FROM python:3.7-alpine

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt

FROM openjdk:8

要从上一阶段复制文件,您需要提及要复制哪些文件以及从哪个阶段复制:

FROM python:3.7-alpine AS python

COPY . /app
WORKDIR /app
RUN pip install -r requirements.txt

FROM openjdk:8
WORKDIR /app
COPY --from=python /app .

如果您只需要编译器之类的东西用于构建过程而不是最终图像,则主要使用多阶段构建。它允许您将映像与构建中所需的依赖项一起使用,然后将它们留在后面,仅使用最终产品和运行时所需的依赖项。

对于您的 Dockerfile,如果您需要 python 和 java 多阶段构建没有帮助,您应该寻找包含两者的基础镜像,或者从一个镜像(比如说 java)开始,然后手动安装另一个镜像(python)。

于 2019-06-02T17:25:30.800 回答