Dockerfile中使用mamba安装Tensorflow到错误环境的问题
根因分析
Docker构建过程中执行RUN指令时,默认启动非交互shell,绝大多数Linux发行版的~/.bashrc文件头部会存在非交互shell检测逻辑,遇到非交互场景会直接终止执行,你追加到文件末尾的conda activate tensorflow命令根本不会被触发,因此执行安装命令时仍处于base环境,包就被安装到了默认位置。
你手动登入容器时启动的是交互shell,~/.bashrc会完整执行,环境激活生效,因此不会出现该问题。
解决方案
优先选择不需要依赖环境激活的方案,稳定性最高:
- 方案1:直接用mamba的
-n参数指定目标环境安装,无需做任何shell配置修改,是最稳妥的方案
修改后的Dockerfile如下:
FROM hongooi/jupytermodelrisk:1.0.0 # 克隆base环境创建tensorflow环境 RUN mamba create -n tensorflow --clone base # 直接指定安装到tensorflow环境 RUN mamba install -y -n tensorflow 'tensorflow=2.4.3' # 可选:如果需要在Jupyter中使用该环境,可追加注册kernel的命令 RUN mamba run -n tensorflow python -m ipykernel install --name tensorflow --display-name "Python (TensorFlow)" # 可选:验证安装结果 RUN mamba run -n tensorflow python -c "import tensorflow as tf; print(tf.__version__)"
- 方案2:如果需要在单条RUN指令中执行多条依赖激活环境的命令,可直接在命令前拼接环境激活逻辑
RUN source activate tensorflow && \ mamba install -y 'tensorflow=2.4.3' && \ # 其他需要在tensorflow环境执行的命令 pip install xxx
- 方案3:如果要全局默认使用tensorflow环境,需修改激活命令的写入位置,避免被非交互检测拦截
RUN mamba create -n tensorflow --clone base # 将激活命令写入~/.profile,login shell会加载该文件 RUN echo "conda activate tensorflow" >> ~/.profile SHELL ["/bin/bash", "--login", "-c"] RUN mamba install -y 'tensorflow=2.4.3'
内容的提问来源于stack exchange,提问作者Hong Ooi
相关产品推荐
相关产品推荐

