docker - 构建 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 镜像。
谢谢。
解决方案
推荐阅读
- reactjs - 是否可以创建一个在任何组件中旋转的抽象轮播组件?
- python - Bokeh plot sort bar plot by values not by index
- javascript - 如何在 HTML 页面上显示 JS 循环的输出
- python - Kivy 开关回调
- python-3.x - (此错误的背景:http://sqlalche.me/e/e3q8)
- java - 如何使用 Spring Batch 将标头和预告片写入现有文件而不覆盖该文件中的信息?
- reactjs - 路线在反应中给出警告信息?
- java - 检查二维数组的行、列和对角线中的字符是否相同
- php - 3rs 列落在打印预览上
- ios - SSL 上的 Swift 授权标头