conda在docker中不能正常初始化以及找不到的问题及解决

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
在探索的过程中,我收集到了几点关键性信息:

  1. conda init其实就是在用户的bashrc文件中加入一组代码,其目的是使用户在登陆就能在环境变量中加入conda的路径,使其能调用conda命令,
  2. .bashrc 文件中写明了,在非交互式模式下不会执行。
# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac
  1. docker build的过程中其实是非交互模式

解决

以上几点说明了关键性问题就在 .bashrc 在非交互模式下不能执行。所以要么将其设置成交互模式,要么将conda init后加入.bashrc的内容手动执行一下。具体实现有几种方式:

  1. bash -ic ‘source .bashrc’
  2. #!/bin/bash -i 加入到shell脚本首行
  3. eval “$(cat ~/.bashrc | tail -n +10)”
  4. source conda安装路径/etc/profile.d/conda.sh

你可能感兴趣的:(conda,docker,linux)