我在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/