如何订购多个FROM?

时间:2019-04-09 15:57:41

标签: linux bash docker g++ alpine

我在Dockerfile中订购多个FROM时遇到问题。我想同时使用两个bash utils,例如bc在shell脚本和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

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

这不是它的工作方式。多个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

让我知道这是否有帮助。