我正在使用Docker构建一个Python容器,目的是在多台机器上拥有可重现的环境,这些机器是一堆开发Macbook和几台AWS EC2服务器。
容器基于continuumio/miniconda3
,即Dockerfile以
FROM continuumio/miniconda3
几天前在Ubuntu上 Docker文件中的conda install
和conda upgrade
命令抱怨新的Conda版本(4.11)可用:
==> WARNING: A newer version of conda exists. <==
current version: 4.4.10
latest version: 4.4.11
Please update conda by running
$ conda update -n base conda
如果我忽略这一点,软件包安装将退出并显示错误:
Downloading and Extracting Packages
The command '/bin/sh -c conda install -y pandas=0.22.0 matplotlib
scikit-learn=0.19.1 pathos lazy openpyxl pytables dill pydro psycopg2
sqlalchemy pyarrow arrow-cpp parquet-cpp scipy tensorflow keras
xgboost' returned a non-zero code: 1
当我将此conda update...
添加到Docker文件时,事情再次起作用。
然而,令人讨厌的是,使用Ubuntu 运行的更新在Mac Docker 上无效。我收到以下错误:
CondaEnvironmentNotFoundError: Could not find environment: base .
You can list all discoverable environments with `conda info --envs`.
请注意,当我docker build
在Ubuntu机器上运行相同的Docker文件时,我收到此错误,这样就破坏了首先使用Docker的重点。在Mac上,旧版本的文件(没有conda update -n base conda
)仍可正常运行并安装所有软件包。
Docker / Conda专家,有什么想法吗?
编辑:这里是完整的Dockerfile(在Ubuntu中运行的那个):
# Use an official Python runtime as a parent image
FROM continuumio/miniconda3
WORKDIR /app/dev/predictive.analytics
RUN apt-get update; \
apt-get install -y gcc tmux htop
RUN conda update -y -n base conda
RUN conda config --add channels babbel; \
conda config --add channels conda-forge;
RUN conda install -y pandas=0.22.0 matplotlib scikit-learn=0.19.1 pathos lazy openpyxl pytables dill pydro psycopg2 sqlalchemy pyarrow arrow-cpp parquet-cpp scipy tensorflow keras xgboost
RUN pip install recordclass sultan
RUN conda upgrade -y python
ENV DATA_DIR /host/data
ENV PYTHONPATH /host/predictive.analytics/python
ENV PATH="/host/predictive.analytics:${PATH}"
答案 0 :(得分:2)
也许您在其中一台构建计算机上使用过时的miniconda,尝试docker build --pull --no-cache
。
Docker并不一定从存储库中提取最新的图像,因此除非你执行--pull,否则你的某些机器可能会使用过时的基本映像启动构建。