首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >多级文件

多级文件
EN

Stack Overflow用户
提问于 2019-06-02 16:47:05
回答 1查看 361关注 0票数 1

我为android找到了一个dockerfile

代码语言:javascript
复制
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内容如下:

代码语言:javascript
复制
FROM python:3.7-alpine

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

它适用于pyhton应用程序。

但是,我如何组合这些文件呢?

以下设置不起作用:

代码语言:javascript
复制
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,在您的路径中找不到'java‘命令。

EN

回答 1

Stack Overflow用户

发布于 2019-06-02 17:25:30

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

代码语言:javascript
复制
FROM python:3.7-alpine

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

FROM openjdk:8

要复制上一阶段的文件,需要提到要复制的文件和要复制的阶段:

代码语言:javascript
复制
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)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56417008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档