Docker 和 Conda:在 Mac 和 Ubuntu 上构建相同容器时的差异
Docker and Conda: Differences when building the same container on Mac and on Ubuntu
我正在使用 Docker 构建一个 Python 容器,目的是在几台机器上拥有一个可重现的环境,这些机器是一堆开发 Mac 书籍和几本AWS EC2 服务器。
容器基于continuumio/miniconda3
,即Docker文件以
开头
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[= 上不起作用45=]。我收到以下错误:
CondaEnvironmentNotFoundError: Could not find environment: base .
You can list all discoverable environments with `conda info --envs`.
请注意,当我 docker build
与在 Ubuntu 机器上运行的相同 Docker 文件时出现此错误,这破坏了使用 [=49= 的全部意义] 首先。在 Mac 上,旧版本的文件(没有 conda update -n base conda
)仍然 运行 可以并安装所有软件包。
Docker / Conda 专家,有什么想法吗?
编辑: 这是完整的 Docker 文件(在 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}"
也许您在其中一台构建机器上使用了过时的 miniconda,请尝试 docker build --pull --no-cache
。
Docker 不一定会从存储库中提取最新的映像,因此除非您执行 --pull,否则您的某些机器可能会使用过时的基础映像开始构建。
我正在使用 Docker 构建一个 Python 容器,目的是在几台机器上拥有一个可重现的环境,这些机器是一堆开发 Mac 书籍和几本AWS EC2 服务器。
容器基于continuumio/miniconda3
,即Docker文件以
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[= 上不起作用45=]。我收到以下错误:
CondaEnvironmentNotFoundError: Could not find environment: base .
You can list all discoverable environments with `conda info --envs`.
请注意,当我 docker build
与在 Ubuntu 机器上运行的相同 Docker 文件时出现此错误,这破坏了使用 [=49= 的全部意义] 首先。在 Mac 上,旧版本的文件(没有 conda update -n base conda
)仍然 运行 可以并安装所有软件包。
Docker / Conda 专家,有什么想法吗?
编辑: 这是完整的 Docker 文件(在 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}"
也许您在其中一台构建机器上使用了过时的 miniconda,请尝试 docker build --pull --no-cache
。
Docker 不一定会从存储库中提取最新的映像,因此除非您执行 --pull,否则您的某些机器可能会使用过时的基础映像开始构建。