docker - 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}
解决方案
而不是修改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
推荐阅读
- algorithm - 我们如何计算整数数组中互质整数对的数量?(CSES)
- node.js - 如何使用猫鼬模式存储数据以使用嵌套对象?
- c++ - 如何将“void(Args args)”转换为“std::function
" - java - 运行编译的 scala 3 代码给出 java.lang.NoClassDefFoundError: scala/util/CommandLineParser$ParseError
- java - Connection.rollback() 在 Java 中不起作用
- databricks - Delta Lake 存储层 - 概念
- caching - 通过增加数组的大小来减少缓存未命中 - 为什么这样做?
- c# - 可以从任务中调用相同的任务吗?
- python - Flask 背靠背渲染两个模板
- android - 如何在jetpack compose中显示已安装的应用程序图标