我有问题在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
有什么建议?
这不是它的工作原理。多个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
如果这有帮助,请告诉我。