【问题标题】:Docker and Conda: Differences when building the same container on Mac and on UbuntuDocker 和 Conda:在 Mac 和 Ubuntu 上构建相同容器时的差异
【发布时间】:2018-03-05 08:37:02
【问题描述】:

我正在使用 Docker 构建一个 Python 容器,目的是在几台机器上拥有一个可重现的环境,这些机器是一堆开发 Macbook 和几台 AWS EC2 服务器。

容器基于continuumio/miniconda3,即Dockerfile以

开头
FROM continuumio/miniconda3

几天前在 Ubuntu 上,Docker 文件中的 conda installconda 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}"

【问题讨论】:

  • 也许您在其中一台构建机器上使用了过时的 miniconda,当您执行 docker build --pull --no-cache 时会发生什么?
  • @LieRyan 当我启动 EC2 机器时,它从 AMI 重新启动,docker build 在该机器上总是新鲜的。但是,Mac 上的情况并非如此——我会检查一下!
  • @LieRyan 就是这样! Mac 使用的是旧版本。不知何故,我的印象是 Docker 检查它的缓存是否已过时。现在 Dockerfile 在两台机器上运行。如果您发布答案,我很乐意接受。
  • @DCS:作为答案添加了这个

标签: python docker anaconda conda


【解决方案1】:

也许您在其中一台构建机器上使用过时的 miniconda,请尝试使用 docker build --pull --no-cache

Docker 不一定会从存储库中拉取最新的镜像,因此除非您执行 --pull,否则您的某些机器可能会使用过时的基础镜像开始构建。

【讨论】:

  • 我面临同样的问题,但目前在我构建图像的 Visual Studio Code 中工作,而不是通过终端。如何将此解决方案与 Visual Studio Code 结合?
猜你喜欢
  • 2023-03-14
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2019-10-06
  • 2021-09-10
  • 2021-08-02
  • 2019-01-09
  • 2020-10-06
相关资源
最近更新 更多