【发布时间】:2016-10-23 01:56:19
【问题描述】:
场景
我正在尝试基于公共 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
激活新的虚拟环境时。
建议一:
按照this answer我试过了:
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 开箱即用。 我很欣赏任何想法。谢谢!
【问题讨论】:
-
bash -c "source activate whatever"将其导入到新的 shell 中,但这不是您需要的——您希望将这些变量添加到您的 现有 shell 中,以便它们发挥作用,否则当以bash -c命令退出的shell 启动时,更新将被破坏,因此在您可以列出环境变量。 -
因此,如果您希望新变量出现在
env list中,您需要它更像... && source testenv/bin/activate && conda env list——尽管它们仍然不会出现在任何未来的运行中调用,因为每次调用都在一个新的 shell 中,没有 shell(或其他 UNIX 进程)可以修改其父进程的环境变量。 -
感谢@CharlesDuffy,你帮助我理解了潜在的问题。
-
@ccauet 你能更新你的问题,解释你遇到的问题吗?我的 docker 找不到
bash -c但是当我进入容器本身然后激活容器内的 conda env 时,一切正常。最好明确说明您遇到的问题。 -
似乎
RUN /bin/bash -c "source activate pytorch-py35"确实有效...不知道为什么RUN /bin/bash -c source activate pytorch-py35无效。