无法在 dockerfile 中创建 conda env
Cant create conda env in dockerfile
我的应用程序文件夹中有一个 environment.yml
我的 dockerfile 中有这个:
RUN conda env create
RUN source activate myenvfromymlfile
当我 运行 容器虽然 env 没有被激活。如果我 do conda env list
看到 /opt/conda
被激活:
root@9c7181cf86aa:/app# conda env list
# conda environments:
#
myenvfromymlfile /opt/conda/envs/myenvfromymlfile
root * /opt/conda
如果我附加到容器,我可以手动 运行 source activate myenvfromymlfile
并且它有效,但为什么在 运行 指令中不起作用??
在示例中,我经常在需要 conda 的 dockerfiles 中看到:
CMD [ "source activate your-environment && exec python application.py" ]
有人可以解释为什么必须使用 && 使其成为一个命令吗?为什么 运行ning "source activate" 在 运行 指令中不起作用?我想让我的 dockerfile 看起来像这样:
RUN conda env create
RUN source activate myenvfromymlfile
ENTRYPOINT ["python"]
CMD ["application.py"]
考虑下面的 Dockerfile
RUN conda env create
RUN source activate myenvfromymlfile
ENTRYPOINT ["python"]
CMD ["application.py"]
语句 #1 conda env create
。创建环境并更改磁盘上的文件。
声明 #2 source activate myenvfromymlfile
。在 bash 会话中加载一些内容。此处未更改磁盘
语句 #3 和 #4 指定当您 运行 容器
时会发生什么
ENTRYPOINT ["python"]
CMD ["application.py"]
所以现在当您 运行 容器时。您在步骤#2 中所做的任何操作都不存在,因为 shell 已启动到 运行 步骤 #2,当它完成时 shell 已关闭。现在,当你 运行 启动一个新的 shell 图像时,它是 b运行d new shell 而现在不知道你的 docker 文件中的过去你运行source activate myenvfromymlfile
现在您想 运行 这个 application.py
在您创建的环境中。 docker 的默认 shell 是 sh -c
。所以当你设置 CMD
如下
CMD [ "source activate your-environment && exec python application.py" ]
容器启动时执行的最终命令变为
sh -c "source activate your-environment && exec python application.py"
这会激活当前 shell 中的环境,然后 运行 您的程序。
我的应用程序文件夹中有一个 environment.yml
我的 dockerfile 中有这个:
RUN conda env create
RUN source activate myenvfromymlfile
当我 运行 容器虽然 env 没有被激活。如果我 do conda env list
看到 /opt/conda
被激活:
root@9c7181cf86aa:/app# conda env list
# conda environments:
#
myenvfromymlfile /opt/conda/envs/myenvfromymlfile
root * /opt/conda
如果我附加到容器,我可以手动 运行 source activate myenvfromymlfile
并且它有效,但为什么在 运行 指令中不起作用??
在示例中,我经常在需要 conda 的 dockerfiles 中看到:
CMD [ "source activate your-environment && exec python application.py" ]
有人可以解释为什么必须使用 && 使其成为一个命令吗?为什么 运行ning "source activate" 在 运行 指令中不起作用?我想让我的 dockerfile 看起来像这样:
RUN conda env create
RUN source activate myenvfromymlfile
ENTRYPOINT ["python"]
CMD ["application.py"]
考虑下面的 Dockerfile
RUN conda env create
RUN source activate myenvfromymlfile
ENTRYPOINT ["python"]
CMD ["application.py"]
语句 #1 conda env create
。创建环境并更改磁盘上的文件。
声明 #2 source activate myenvfromymlfile
。在 bash 会话中加载一些内容。此处未更改磁盘
语句 #3 和 #4 指定当您 运行 容器
时会发生什么ENTRYPOINT ["python"]
CMD ["application.py"]
所以现在当您 运行 容器时。您在步骤#2 中所做的任何操作都不存在,因为 shell 已启动到 运行 步骤 #2,当它完成时 shell 已关闭。现在,当你 运行 启动一个新的 shell 图像时,它是 b运行d new shell 而现在不知道你的 docker 文件中的过去你运行source activate myenvfromymlfile
现在您想 运行 这个 application.py
在您创建的环境中。 docker 的默认 shell 是 sh -c
。所以当你设置 CMD
如下
CMD [ "source activate your-environment && exec python application.py" ]
容器启动时执行的最终命令变为
sh -c "source activate your-environment && exec python application.py"
这会激活当前 shell 中的环境,然后 运行 您的程序。