首页 > 解决方案 > Dockerfile:如何获取 Anaconda

问题描述

我正在尝试使用 AWS Batch 设置 Anaconda 环境

这是我的 Dockerfile 中的一个片段

#: Download Anaconda
COPY Anaconda3-2019.10-Linux-x86_64.sh /setup/
RUN bash Anaconda3-2019.10-Linux-x86_64.sh -b -p /home/ec2-user/anaconda3 
RUN echo 'export PATH=$PATH:/home/ec2-user/anaconda3/bin' >>~/.bashrc \
    && /bin/bash -c "source ~/.bashrc"
ENV PATH $PATH:/home/ec2-user/anaconda3/bin

# Create the environment:
COPY environment.yml .
RUN conda env create -f environment.yml

# Make RUN commands use the new environment:
SHELL ["conda", "run", "-n", "solver_env", "/bin/bash", "-c"]

当我访问我的容器并进行一些简单的测试时,我收到一个错误

conda: command not found

即使我已经找到了 bashrc 文件的路径。

此外,当我尝试访问我的 bashrc 文件时,我得到

cat ~.bashrc: No such file or directory

cat: //.bashrc: No such file or directory

关于我可能会出错/在哪里检查的任何想法?

编辑:

我的 Dockerfile 中用于激活 venv 并启动脚本的最后一行是:

ENTRYPOINT ["conda", "run", "-n", "solver_env", "/bin/bash", "/usr/local/bin/fetch_and_run.sh"]

构建映像并将其部署到 AWS ECR 后,我将启动一个批处理作业,该作业基本上运行此 shell 脚本:

#!/bin/bash
date
echo "Args: $@"
env
echo "script_path: $1"
echo "script_name: $2"
echo "path_prefix: $3"
echo "jobID: $AWS_BATCH_JOB_ID"
echo "jobQueue: $AWS_BATCH_JQ_NAME"
echo "computeEnvironment: $AWS_BATCH_CE_NAME"
   
mkdir /tmp/scripts/
aws s3 cp $1 /tmp/scripts/$2
python3 /tmp/scripts/${@:2}

标签: dockeranacondadockerfile

解决方案


而不是修改SHELL,您应该改为将环境的bin目录添加到PATH.

COPY Anaconda3-2019.10-Linux-x86_64.sh /setup/
RUN bash Anaconda3-2019.10-Linux-x86_64.sh -b -p /home/ec2-user/anaconda3 
RUN echo 'export PATH=$PATH:/home/ec2-user/anaconda3/bin' >>~/.bashrc \
    && /bin/bash -c "source ~/.bashrc"
ENV PATH=$PATH:/home/ec2-user/anaconda3/bin

# Create the environment:
COPY environment.yml .
RUN conda env create -f environment.yml
# Activate the environment.
ENV PATH=/home/ec2-user/anaconda3/envs/solver_env/bin:$PATH

推荐阅读