condas`source activate virtualenv`在Dockerfile中不起作用

cc

情境

我正在尝试基于公共continuumio / anaconda3容器设置一个简单的docker映像(对于docker我是一个新手,所以请更正我可能的误解

Dockerfile

FROM continuumio/anaconda3:latest

# update conda and setup environment
RUN conda update conda -y \
    && conda env list \
    && conda create -n testenv pip -y \
    && source activate testenv \
    && conda env list

以此docker build -t test .结束建筑物和图像,并显示以下错误:

/bin/sh: 1: source: not found

激活新的虚拟环境时。

建议1:

按照这个答案,我尝试了:

FROM continuumio/anaconda3:latest

# update conda and setup environment
RUN conda update conda -y \
    && conda env list \
    && conda create -y -n testenv pip \
    && /bin/bash -c "source activate testenv" \
    && conda env list

乍一看,这似乎很有效,因为它输出:prepending /opt/conda/envs/testenv/bin to PATH,但conda env list同时也echo $PATH清楚地表明它没有:

[...]
# conda environments:
#
testenv                  /opt/conda/envs/testenv
root                  *  /opt/conda

---> 80a77e55a11f
Removing intermediate container 33982c006f94
Step 3 : RUN echo $PATH
---> Running in a30bb3706731
/opt/conda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

docker文件作为MWE开箱即用。我感谢任何想法。谢谢!

DeusXMachina:

方法1:将SHELL与自定义入口点脚本一起使用

编辑:我已经开发了一种新的,改进的方法,它比"conda", "run"语法更好

样本dockerfile可在此摘要中找到它通过利用自定义入口点脚本来设置环境,然后再exec使用该RUN的参数

为什么这样做?

外壳程序(非常简单)是一个可以充当任意程序入口点的进程。exec "$@"使我们能够启动新流程,并继承父流程的所有环境。在这种情况下,这意味着我们激活conda(基本上破坏了许多环境变量),然后运行/bin/bash -c CONTENTS_OF_DOCKER_RUN


方法2:带参数的外壳

这是我以前的方法,由Itamar Turner-Trauring提供非常感谢他们!

# Create the environment:
COPY environment.yml .
RUN conda env create -f environment.yml

# Set the default docker build shell to run as the conda wrapped process
SHELL ["conda", "run", "-n", "vigilant_detect", "/bin/bash", "-c"]

# Set your entrypoint to use the conda environment as well
ENTRYPOINT ["conda", "run", "-n", "myenv", "python", "run.py"]

修改ENV可能不是最好的方法,因为conda喜欢控制环境变量本身。此外,您的自定义conda env可能会激活其他脚本来进一步调制环境。

为什么这样做?

这将利用conda run在启动新的bash shell之前“将条目添加到环境的PATH并运行环境可能包含的所有激活脚本”。

使用conda可能会令人沮丧,因为这两个工具都有效地希望垄断环境,并且从理论上讲,您永远不需要容器内的conda。但是截止日期和技术债务是一件事情,有时您只是必须完成它,有时conda是配置依赖项的最简单方法(在您看来,GDAL)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

virtualenv激活不起作用

Python Anaconda:我应该在Linux中使用`conda activate`或`source Activate`吗

Java / Kotlin- Akka流Source.reduce如果Source中的null不起作用

为什么chown在Dockerfile中不起作用?

在带有'source'的Dockerfile中使用RUN指令不起作用

source()不起作用(“节点堆栈溢出”)

如何更改django allauth中的activate_url的值?

为什么`source / home / vagrant / .bashrc`在Vagrant Shell配置脚本中不起作用?

在Dockerfile中运行/ usr / sbin / sshd不起作用

virtualenv“ workon”不起作用

apt-get在Dockerfile中不起作用

Docker + Ubuntu + Virtualbox:dockerfile中的“ volumes”指令不起作用

使用私有svn + bower在dockerfile中不起作用

COPY和ADD在Dockerfile中不起作用

`source〜/ .bash_profile`在bash脚本中不起作用

virtualenv激活不起作用

在Docker中安装Rust工具链时,Bash`source`命令不起作用

Gsutil在Google Compute Engine的Dockerfile中不起作用

gcloud auth在dockerfile中不起作用

问题出现:source env / bin / activate

在Activate方法中获取活动的路由哈希

为什么`source〜/ .aliases`在.zshrc中不起作用?

Spacy 下载 en 在 virtualenv 中不起作用

Openssl 命令在 Dockerfile Run 中不起作用

Condas activate <env_name> 不会从 base 切换到 env_name

在终端中更改“conda activate”命令?

tkinter wiget.bind('<Activate>', callback) 不起作用

BATCH 脚本在 Dockerfile 构建过程中不起作用

使用 `ThisWorkbook.Activate` 设置焦点并将 ThisWorkbook 的窗口置于前面,不起作用