我在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
有什么建议吗?
答案 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
让我知道这是否有帮助。