【问题标题】:Docker build and run with Miniconda environments on Ubuntu hostDocker 在 Ubuntu 主机上使用 Miniconda 环境构建和运行
【发布时间】:2018-07-18 08:27:46
【问题描述】:

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

# 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 中。同样,我也不确定这是否有任何影响。

【问题讨论】:

    标签: docker ubuntu-18.04 miniconda


    【解决方案1】:

    您应该使用命令CMD 来处理与运行时相关的任何事情。
    RUN 之后键入的任何内容都只会在创建映像时运行,而不是在您实际运行容器时运行。 用于运行此类命令的 shell 在映像创建过程结束时关闭,在这种情况下使环境激活不持久。

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

    【讨论】:

      【解决方案2】:

      这个 docker 构建文件对我有用。

      # start with miniconda image
      FROM continuumio/miniconda3
      
      # setting the working directory 
      WORKDIR /usr/src/app
      
      # Copy the file from your host to your current location in container
      COPY . /usr/src/app
      
      # Run the command inside your image filesystem to create an environment and name it in the requirements.yml file, in this case "myenv"
      RUN conda env create --file requirements.yml
      
      # Activate the environment named "myenv" with shell command
      SHELL ["conda", "run", "-n", "myenv", "/bin/bash", "-c"]
      
      # Make sure the environment is activated by testing if you can import flask or any other package you have in your requirements.yml file
      RUN echo "Make sure flask is installed:"
      RUN python -c "import flask"
      
      # exposing port 8050 for interaction with local host
      EXPOSE 8050
      
      #Run your application in the new "myenv" environment
      CMD ["conda", "run", "-n", "myenv", "python", "app.py"]
      

      【讨论】:

        猜你喜欢
        • 2014-02-01
        • 2019-04-25
        • 2017-03-23
        • 2020-09-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多