我在Dockerfile中订购多个FROM时遇到问题。我想同时使用两个bash utils,例如外壳脚本中的bc和g ++。

第一次尝试:

FROM gcc:7.4

FROM alpine:3.9
RUN apk add --no-cache bash gawk sed grep bc coreutils

RUN g++ ...




---> Running in ...
/bin/sh: g++: not found


第二次尝试:

FROM alpine:3.9
RUN apk add --no-cache bash gawk sed grep bc coreutils

FROM gcc:7.4

RUN g++ ...


现在给

/test/test.sh: line 3: bc: command not found


有什么建议吗?

最佳答案

那不是它的工作原理。多个FROM指令允许您创建multistage Dockerfile。所有阶段都被隔离并按顺序执行。可以从一个阶段访问另一个阶段中的文件,但是为了做到这一点,必须将文件复制到相应的阶段中,但在此不做介绍。

但是,就您而言,您无需使用多阶段构建,只需将gcc作为类似于其他软件包的软件包安装:

FROM alpine:3.9
RUN apk add --no-cache bash gawk sed grep bc coreutils g++

RUN g++ ...


您还可以创建虚拟包,以在完成后删除所有构建包。下面的示例在使用gcc后将其删除:

FROM alpine:3.9
RUN apk add --no-cache bash gawk sed grep bc coreutils \
    && apk add --no-cache --virtual build-dependencies g++ \
    && g++ ... \
    && apk del build-dependencies


让我知道是否有帮助。

关于linux - 如何订购多个FROM?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55596838/

10-13 04:06