Docker 在 Ubuntu 主机上使用 Miniconda 环境构建和运行

标签 docker ubuntu-18.04 miniconda

我正在创建一个 docker 容器,该容器具有一个带有一些软件包(pip 和 conda)的 miniconda 环境设置。 Dockerfile:

# Use an official Miniconda runtime as a parent image
FROM continuumio/miniconda3

# Create the conda environment.
# RUN conda create -n dev_env Python=3.6
RUN conda update conda -y \
    && conda create -y -n dev_env Python=3.6 pip

ENV PATH /opt/conda/envs/dev_env/bin:$PATH

RUN /bin/bash -c "source activate dev_env" \
    && pip install azure-cli \
    && conda install -y nb_conda

我想要的行为是,当容器启动时,它应该自动切换到“dev_env”conda 环境,但我无法让它工作。日志:

dparkar@mymachine:~/src/dev/setupsdk$ docker build .
Sending build context to Docker daemon   2.56kB
Step 1/4 : FROM continuumio/miniconda3
 ---> 1284db959d5d
Step 2/4 : RUN conda update conda -y     && conda create -y -n dev_env Python=3.6 pip
 ---> Using cache
 ---> cb2313f4d8a8
Step 3/4 : ENV PATH /opt/conda/envs/dev_env/bin:$PATH
 ---> Using cache
 ---> 320d4fd2b964
Step 4/4 : RUN /bin/bash -c "source activate dev_env"     && pip install azure-cli     && conda install -y nb_conda
 ---> Using cache
 ---> 3c0299dfbe57
Successfully built 3c0299dfbe57
dparkar@mymachine:~/src/dev/setupsdk$ docker run -it 3c0299dfbe57
(base) root@3db861098892:/# source activate dev_env
(dev_env) root@3db861098892:/# exit
exit
dparkar@mymachine:~/src/dev/setupsdk$ docker run -it 3c0299dfbe57 source activate dev_env
[FATAL tini (7)] exec source failed: No such file or directory
dparkar@mymachine:~/src/dev/setupsdk$ docker run -it 3c0299dfbe57 /bin/bash source activate dev_env
/bin/bash: source: No such file or directory
dparkar@mymachine:~/src/dev/setupsdk$ docker run -it 3c0299dfbe57 /bin/bash "source activate dev_env"
/bin/bash: source activate dev_env: No such file or directory
dparkar@mymachine:~/src/dev/setupsdk$ docker run -it 3c0299dfbe57 /bin/bash -c "source activate dev_env"
dparkar@mymachine:~/src/dev/setupsdk$ 

正如您在上面看到的,当我在容器内时,我可以成功运行“source activate dev_env”并且环境切换。但我希望在容器启动时自动发生这种情况。

在构建期间,这也会发生在 Dockerfile 中。同样,我也不确定这是否有任何影响。

最佳答案

您应该使用命令CMD对于与运行时相关的任何内容。
RUN 之后输入的任何内容仅在创建镜像时运行,而不是在实际运行容器时运行。 用于运行此类命令的 shell 在镜像创建过程结束时关闭,从而使环境激活在这种情况下变得非持久性。

因此,您的附加行可能如下所示: CMD ["conda activate <your-env-name> && <other commands>"] 哪里<other commands>是环境激活后运行时可能需要的其他命令。

关于Docker 在 Ubuntu 主机上使用 Miniconda 环境构建和运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51397104/

相关文章:

python - 如何使用 micromamba 镜像在 Gitlab CI 管道中使用 apt-get 安装软件包

docker - 如何限制传递给链接容器的环境变量

通过特定物理接口(interface)的 docker 网络

docker - 使用Docker Toolbox在Windows 10的PATH中找不到Docker Compose

ubuntu - "Failed to initialize NVML: Driver/library version mismatch"- Ubuntu 服务器是否自动更新?

Mongodb:如何在崩溃时自动重启?

python - Conda 在使用 channel 时无法解析 requirements.yml

docker - 在Docker镜像中处理软件更新

docker - 为什么在Windows子系统上为Ubuntu启动docker服务后立即关闭它?

python - 如何从 jupyter 笔记本中删除停用的 conda 环境名称?