Python Docker中没有名为conda的模块
我正在尝试创建一个装有miniconda3的docker图像。我不想直接使用,而是想从头开始创建自己的Dockerfile,并将ContinuMio/miniconda3图像的Dockerfile命令放在那里,它们是:Python Docker中没有名为conda的模块,python,docker,dockerfile,conda,miniconda,Python,Docker,Dockerfile,Conda,Miniconda,我正在尝试创建一个装有miniconda3的docker图像。我不想直接使用,而是想从头开始创建自己的Dockerfile,并将ContinuMio/miniconda3图像的Dockerfile命令放在那里,它们是: FROM debian:latest # $ docker build . -t continuumio/miniconda3:latest -t continuumio/miniconda3:4.5.11 # $ docker run --rm -it continuum
FROM debian:latest
# $ docker build . -t continuumio/miniconda3:latest -t continuumio/miniconda3:4.5.11
# $ docker run --rm -it continuumio/miniconda3:latest /bin/bash
# $ docker push continuumio/miniconda3:latest
# $ docker push continuumio/miniconda3:4.5.11
ENV LANG=C.UTF-8 LC_ALL=C.UTF-8
ENV PATH /opt/conda/bin:$PATH
RUN apt-get update --fix-missing && \
apt-get install -y wget bzip2 ca-certificates curl git && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-4.5.11-Linux-x86_64.sh -O ~/miniconda.sh && \
/bin/bash ~/miniconda.sh -b -p /opt/conda && \
rm ~/miniconda.sh && \
/opt/conda/bin/conda clean -tipsy && \
ln -s /opt/conda/etc/profile.d/conda.sh /etc/profile.d/conda.sh && \
echo ". /opt/conda/etc/profile.d/conda.sh" >> ~/.bashrc && \
echo "conda activate base" >> ~/.bashrc
ENV TINI_VERSION v0.16.1
ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /usr/bin/tini
RUN chmod +x /usr/bin/tini
ENTRYPOINT [ "/usr/bin/tini", "--" ]
CMD [ "/bin/bash" ]
构建和运行容器工作正常。以下是容器中conda info
的输出,以供参考:
(base) root@def48bd1ed5d:/# conda info
active environment : base
active env location : /opt/conda
shell level : 1
user config file : /root/.condarc
populated config files :
conda version : 4.5.11
conda-build version : not installed
python version : 3.7.0.final.0
base environment : /opt/conda (writable)
channel URLs : https://repo.anaconda.com/pkgs/main/linux-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/free/linux-64
https://repo.anaconda.com/pkgs/free/noarch
https://repo.anaconda.com/pkgs/r/linux-64
https://repo.anaconda.com/pkgs/r/noarch
https://repo.anaconda.com/pkgs/pro/linux-64
https://repo.anaconda.com/pkgs/pro/noarch
package cache : /opt/conda/pkgs
/root/.conda/pkgs
envs directories : /opt/conda/envs
/root/.conda/envs
platform : linux-64
user-agent : conda/4.5.11 requests/2.19.1 CPython/3.7.0 Linux/4.4.0-187-generic debian/10 glibc/2.28
UID:GID : 0:0
netrc file : None
offline mode : False
每当我尝试使用conda
安装模块时,就会出现问题,例如conda install jupyter-y
。该过程开始,在安装过程中的某个时刻,我收到以下错误:
Preparing transaction: done
Verifying transaction: done
Executing transaction: done
Traceback (most recent call last):
File "/opt/conda/bin/conda", line 7, in <module>
from conda.cli import main
ModuleNotFoundError: No module named 'conda'
(base) root@def48bd1ed5d:/#
miniconda3
Dockerfile内安装行中指定的版本不是最新版本
用于构建本地映像的将安装miniconda3-4.5.11
而不是最新版本。你可以在这里找到它:
...
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-4.5.11-Linux-x86_64.sh -O ~/miniconda.sh && \
/bin/bash ~/miniconda.sh -b -p /opt/conda &&
...
也可以通过这种方式使用docker
:
$docker build——标记miniconda3:test。
$docker docker运行-i-t miniconda3:test/bin/bash
$docker历史记录--无trunc miniconda3:测试| grep miniconda3
/垃圾箱/垃圾箱-垃圾箱-安静https://repo.anaconda.com/miniconda/Miniconda3-4.5.11-Linux-x86_64.sh -O~/miniconda.sh&。。。
好的,现在让我们看看官方的continuMio/miniconda3
:
$docker run-i-t continumio/miniconda3/bin/bash
然后:
$docker history——无trunc ContinuMio/miniconda3 | grep miniconda3
/垃圾箱/垃圾箱-垃圾箱-安静https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O~/miniconda.sh&。。。
如您所见,DockerHub安装的是最新的miniconda3
4.8.2
,而不是4.5.11
版本。因此,从该Dockerfile
构建的本地映像将生成具有miniconda3:4.5.11
的容器
python
version中的更改中断了conda
现在,让我们找出conda
失败的原因。首先构建并运行:
$docker build——标记miniconda3:test。
$docker docker运行-i-t miniconda3:test/bin/bash
获取一些信息:
(基本)root@61cafd17d954:/#康达信息
活动环境:基础
活动环境位置:/opt/conda
外壳级别:1
用户配置文件:/root/.condarc
填充的配置文件:
康达版本:4.5.11
conda生成版本:未安装
python版本:3.7.0.final.0
基本环境:/opt/conda(可写)
频道URL:https://repo.anaconda.com/pkgs/main/linux-64
https://repo.anaconda.com/pkgs/main/noarch
https://repo.anaconda.com/pkgs/free/linux-64
https://repo.anaconda.com/pkgs/free/noarch
https://repo.anaconda.com/pkgs/r/linux-64
https://repo.anaconda.com/pkgs/r/noarch
https://repo.anaconda.com/pkgs/pro/linux-64
https://repo.anaconda.com/pkgs/pro/noarch
包缓存:/opt/conda/pkgs
/root/.conda/pkgs
环境目录:/opt/conda/envs
/root/.conda/envs
平台:linux-64
用户代理:conda/4.5.11 requests/2.19.1 CPython/3.7.0 Linux/5.4.0-48-generic debian/10 glibc/2.28
UID:GID:0:0
netrc文件:无
脱机模式:False
好的,我们有conda:4.5.11
和python:3.7.0
现在,我们将安装jupyter
,例如:
(基本)root@61cafd17d954:/#康达安装jupyter
您可能会注意到,此安装将更新python
:
将更新以下软件包:
...
python:3.7.0-hc3d631a_0-->3.8.5-h7579374_1
...
如果继续,这将更新python
,并将中断conda
:
。。。
准备事务:完成
验证事务:完成
执行事务:完成
回溯(最近一次呼叫最后一次):
文件“/opt/conda/bin/conda”,第7行,在
从conda.cli导入main
ModuleNotFoundError:没有名为“conda”的模块
这是一个众所周知的问题,您可以在答案和官方康达回购协议中找到更多关于这个问题的信息:
更新conda
或对miniconda3:最新版本使用Dockerfile
此问题有3种可能的解决方案:
通过替换此行编辑您的Dockerfile
:
运行wget——安静https://repo.anaconda.com/miniconda/Miniconda3-4.5.11-Linux-x86_64.sh -O~/miniconda.sh&&\
与
运行wget——安静https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O~/miniconda.sh&&\
使用continuMio
中最新的官方Dockerfile
,您可以找到它
使用前更新容器内的conda
:
(基本)root@61cafd17d954:/#康达更新康达
感谢您提供非常详细的解释和参考资料。它最终解决了这个问题。
...
RUN wget --quiet https://repo.anaconda.com/miniconda/Miniconda3-4.5.11-Linux-x86_64.sh -O ~/miniconda.sh && \
/bin/bash ~/miniconda.sh -b -p /opt/conda &&
...