【问题标题】:how to order multiple FROM?如何订购多个 FROM?
【发布时间】:2019-08-30 23:38:02
【问题描述】:

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

有什么建议吗?

【问题讨论】:

    标签: linux bash docker g++ alpine


    【解决方案1】:

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

    如果这有帮助,请告诉我。

    【讨论】:

    • 非常感谢。它有很大帮助。我只需要添加 g++ 而不是 gcc。再次感谢。
    • 不客气!如果有帮助,请您接受答案。
    猜你喜欢
    • 1970-01-01
    • 2017-07-05
    • 1970-01-01
    • 2018-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多