conda在docker中不能正常初始化以及找不到的问题及解决
在使用dockerfile来builddocker镜像的过程中,经常报错找不到conda。哪怕source 用户的.bashrc也不行。这次想探究一下为什么在docker build阶段会找不到已经安装好并且conda init过的conda。
·
ubuntu : 18.04
conda、docker版本不重要
问题描述
在使用dockerfile 来build docker镜像的过程中,经常报错找不到conda。哪怕source 用户的.bashrc也不行。这次想探究一下为什么在docker build阶段会找不到已经安装好并且conda init过的conda。
探索
https://askubuntu.com/questions/64387/cannot-successfully-source-bashrc-from-a-shell-script
https://unix.stackexchange.com/questions/257571/why-does-bashrc-check-whether-the-current-shell-is-interactive
在探索的过程中,我收集到了几点关键性信息:
- conda init其实就是在用户的bashrc文件中加入一组代码,其目的是使用户在登陆就能在环境变量中加入conda的路径,使其能调用conda命令,
- .bashrc 文件中写明了,在非交互式模式下不会执行。
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac
- docker build的过程中其实是非交互模式
解决
以上几点说明了关键性问题就在 .bashrc 在非交互模式下不能执行。所以要么将其设置成交互模式,要么将conda init后加入.bashrc的内容手动执行一下。具体实现有几种方式:
- bash -ic ‘source .bashrc’
- 将
#!/bin/bash -i
加入到shell脚本首行 - eval “$(cat ~/.bashrc | tail -n +10)”
- source conda安装路径/etc/profile.d/conda.sh
更多推荐
已为社区贡献1条内容
所有评论(0)