【问题标题】:Problems running conda update in a dockerfile在 dockerfile 中运行 conda update 的问题
【发布时间】:2019-07-31 13:37:52
【问题描述】:

我正在尝试创建一个带有一些 conda 环境的 docker 容器。当我以交互模式运行容器时运行

conda update --all
conda env create -f env.yml

运行没有问题。但是,每当我尝试使用 Docker 文件执行这些命令时,我都会收到

/bin/sh: 1: conda: command not foud

Docker 文件如下图所示:

FROM ubuntu:latest
RUN apt-get update && \
    apt-get install unzip && \
    mkdir /install && \
    apt-get install nano
COPY Anaconda3-2018.12-Linux-x86_64.sh env.yml /install/
WORKDIR /install
RUN bash Anaconda3-2018.12-Linux-x86_64.sh -b && \
    echo "export PATH="/root/anaconda3/bin:$PATH"" >> ~/.bashrc && \
    /bin/bash -c "source ~/.bashrc"
RUN conda update --all
RUN conda env create -f env.yml

所以似乎使用的是 sh 而不是 bash,所以我将 Dockerfile 编辑为以下内容:

FROM ubuntu:latest
RUN apt-get update && \
    apt-get install unzip && \
    mkdir /install && \
    apt-get install nano
COPY Anaconda3-2018.12-Linux-x86_64.sh env.yml /install/
WORKDIR /install
RUN bash Anaconda3-2018.12-Linux-x86_64.sh -b && \
    echo "export PATH="/root/anaconda3/bin:$PATH"" >> ~/.bashrc && \
    /bin/bash -c "source ~/.bashrc"
RUN /bin/bash -c "conda update --all"

出现以下错误

/bin/bash: conda: command not found

【问题讨论】:

  • 尝试在 docker 构建过程中设置路径:ENV PATH /root/anaconda3/bin:$PATH 在运行 conda 命令之前
  • 完美!做到了。你能解释一下为什么需要重新设置路径吗?
  • 我认为这是因为RUN 语句是相互隔离的。 cdsource 不会影响下一个 RUN 语句。
  • @cel 你想发表一个我认为正确的答案吗?

标签: docker anaconda dockerfile conda


【解决方案1】:

您必须在构建期间使用 ENV 变量将 anaconda 添加到 PATH,然后在 Dockerfile 中执行 anaconda。

RUN bash Anaconda3-2018.12-Linux-x86_64.sh -b && \
    echo "export PATH="/root/anaconda3/bin:$PATH"" >> ~/.bashrc && \
    /bin/bash -c "source ~/.bashrc"
ENV PATH /root/anaconda3/bin:$PATH
RUN conda update --all

更新 .bashrc 中的 PATH 可以在使用 docker run 运行时调用容器内的 conda,但不能在 docker 文件中的其他 RUN 语句中调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-07
    • 2021-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多