首页 > 解决方案 > 构建 Dockerfile 时相当于采购 ~/.bashrc

问题描述

我已经lobis/geant4-root基于 Ubuntu 20.04 构建了一个 docker 映像(位于 dockerhub 上),我在其中安装了一些软件并将相应source XXX的软件放在~/.bashrc文件中。当我以交互模式运行带有此图像的容器时,docker run -it lobis/geant4-root所有环境变量都已正确设置,正如您在登录 shell 上所期望的那样。例子:

运行docker run -it lobis/geant4-root

root@99261664efb1:/# geant4-config --version
10.7.1

但是,当我尝试构建另一个使用此图像作为基础的图像时,我找不到一种方法来加载变量以在命令~/.bashrc中使用它们。RUN我已经看到了许多与此问题相关的问题,但无法找到任何解决方案。

我尝试将基本 Dockerfile 的最后一行更改为SHELL ["/bin/bash", "-c", "-l"]未成功,并尝试使用RUN bash -l -c 'command'RUN source ~/.bashrc && bash command未成功的组合在派生的 Dockerfile 上运行我的命令。我也尝试设置ENV BASH_ENV "/root/.bashrc".

这个 Dockerfile 应该10.7.1在构建日志上输出,表明找到了正确的软件版本,但是没有输出,并且所有需要这个软件的后续命令都失败了。

FROM lobis/geant4-root:latest
# some of the things I tried
ENV BASH_ENV "/root/.bashrc"
SHELL ["/bin/bash", "-l"]
RUN ["/bin/bash", "-l", "geant4-config --version"]
RUN geant4-config --version
CMD ["/bin/bash"]

我猜这是一个相当常见的用例,因为根据我的经验,某些软件通常依赖于通过源脚本加载,所以请让我知道执行此操作的正确方法。最好我想避免修改基础 docker 镜像。

谢谢。

标签: dockerdockerfile

解决方案


推荐阅读