python - 在 docker 中激活 conda 环境
问题描述
我需要在 docker 中激活环境并在此环境中运行命令。我创建了环境,但随后我尝试激活此环境并以这种方式运行命令:
CMD [ "source activate mro_env && ipython kernel install --user --name=mro_env" ]
但是当我运行 docker 时出现错误:
[FATAL tini (8)] exec source activate mro_env && ipython kernel install
--user --name=mro_env failed: No such file or directory
这是整个 Dockerfile:
FROM continuumio/miniconda3
ADD /src/mro_env.yml /src/mro_env.yml
RUN conda env create -f /src/mro_env.yml
# Pull the environment name out of the mro_env.yml
RUN echo "source activate $(head -1 /src/mro_env.yml | cut -d' ' -f2)" > ~/.bashrc
ENV PATH /opt/conda/envs/$(head -1 /src/mro_env.yml | cut -d' ' -f2)/bin:$PATH
CMD [ "source activate mro_env && ipython kernel install --user --name=mro_env" ]
解决方案
遵循本教程并且它有效。示例 Dockerfile:
FROM continuumio/miniconda
WORKDIR /usr/src/app
COPY ./ ./
RUN conda env create -f environment.yml
# Make RUN commands use the new environment:
SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"]
EXPOSE 5003
# The code to run when container is started:
ENTRYPOINT ["conda", "run", "-n", "myenv", "python3", "src/server.py"]
更新:
如果您使用 4.9 版本的 conda,您可以使用“conda run --no-capture-output”来不缓冲 IO。更新的 Dockerfile:
FROM continuumio/miniconda
WORKDIR /usr/src/app
COPY ./ ./
RUN conda env create -f environment.yml
# Make RUN commands use the new environment:
SHELL ["conda", "run", "--no-capture-output", "-n", "myenv", "/bin/bash", "-c"]
EXPOSE 5003
# The code to run when container is started:
ENTRYPOINT ["conda", "run", "--no-capture-output", "-n", "myenv", "python3", "src/server.py"]
推荐阅读
- swift - 无法覆盖 prefersHomeIndicatorAutoHidden() 方法
- ruby-on-rails - will_paginate 在帖子分页时删除组中的帖子
- c# - 使用 MVVM 更改按钮 BackgroundColor
- php - 在 Wordpress 自定义中增加主题允许的可用字体类型的数量
- c# - 使用代码而不是 XAML 更改 NavigationView TintColor
- sql - 使用 CHARINDEX 将 NVARCHAR DATE 转换为 DATETIME
- c# - 如何在 JSON 中格式化状态代码,应用范围
- h2 - 当 H2 数据库中列的类型发生变化时,索引会发生什么?
- html - 引导标签文本粘贴到输入字段的下线
- javascript - 在 JavaScript/Node.js 中间隔发送内容