如何订购多个FROM?

how to order multiple FROM?

我在 Dockerfile 中订购多个 FROM 时遇到问题。我想同时使用 bash 实用程序,例如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

有什么建议吗?

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

如果有帮助请告诉我。