目前为止我所拥有的内容:
cat Dockerfile
FROM centos:7 AS env
RUN yum update -y
RUN yum install -y centos-release-scl
RUN yum install -y devtoolset-9
RUN echo "source /opt/rh/devtoolset-9/enable" >> /etc/bashrc
SHELL ["/bin/bash", "--login", "-c"]
RUN gcc --version
因此,您需要:
在bashrc中添加源代码
注意:在Centos上是/etc/bashrc
,而在ubuntu上是/etc/bash.bashrc
将docker默认 shell 更新为 bash,并使用 --login
来“加载”bashrc。
docker build .
Sending build context to Docker daemon 4.096kB
Step 1/32 : FROM centos:7 AS env
---> 8652b9f0cb4c
Step 2/32 : RUN yum update -y
---> Using cache
---> a2bb269cd8dc
Step 3/32 : RUN yum install -y centos-release-scl
---> Using cache
---> 1184e26c71cf
Step 4/32 : RUN yum install -y devtoolset-9
---> Using cache
---> e678665d2a4e
Step 5/32 : RUN echo "source /opt/rh/devtoolset-9/enable" >> /etc/bashrc
---> Using cache
---> fe1745d4ca87
Step 6/32 : SHELL ["/bin/bash", "--login", "-c"]
---> Running in 2dd7955f4487
Removing intermediate container 2dd7955f4487
---> 3cf4835bf680
Step 7/32 : RUN gcc --version
---> Running in b5de3266d607
gcc (GCC) 9.3.1 20200408 (Red Hat 9.3.1-2)
Copyright (C) 2019 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
...
不起作用的方法
测试1
RUN scl enable devtoolset-9 bash
RUN gcc --version | head -1
每个RUN
都是一个新的shell,所以子bash在第二行丢失。
测试2
RUN source /opt/rh/devtoolset-9/enable && gcc --version | head -1
RUN gcc --version | head -1
这里再次提到的源仅适用于第一个RUN shell命令,但会丢失...
测试3
这可能有效,但存在潜在的意外行为。
ENV PATH=/opt/rh/devtoolset-9/root/bin:$PATH
RUN gcc --version | head -1
在这里我们只是“修复”PATH
变量,但是如果您查看/opt/rh/devtoolset-9/enable
脚本,还有更多需要做的事情,不仅仅是更新PATH
...