docker - 如何在运行 Docker 命令之前激活 conda 环境
问题描述
我正在使用 Dockerfile 创建一个带有 conda 环境myEnv
的 docker 映像。
我想在运行 docker 映像时使用
docker run -it myDockerImage
进入已经激活环境的 bash 终端。我知道我们可以将变量和命令传递给,docker run
但我希望它能够自动完成。
我尝试将以下变体添加到 Dockerfile 的末尾,但似乎没有任何效果:
CMD ["source /root/miniconda/bin/activate myEnv"]
CMD [".", "/root/miniconda/bin/activate", "myEnv"]
CMD ["source /root/miniconda/bin/activate myEnv; /bin/bash"]
解决方案
ENTRYPOINT
在你的 Dockerfile 中执行此操作。
src/入口点.sh
#!/bin/bash
# enable conda for this shell
. /opt/conda/etc/profile.d/conda.sh
# activate the environment
conda activate my_environment
# exec the cmd/command in this process, making it pid 1
exec "$@"
src/Dockerfile
# ...
COPY ./entrypoint.sh ./entrypoint.sh
RUN chmod +x ./entrypoint.sh
ENTRYPOINT ["./entrypoint.sh"]
推荐阅读
- docker - 使用 JDBC 输入插件在 Docker 上的 Logstash 不会从 SQL Server 获取所有行
- flutter - 如何突出显示我在字符串中搜索的确切单词,而不仅仅是字符串的开头?
- flutter - 如何实时获取文档长度
- javascript - Reactjs 从获取请求中返回一个对象
- javascript - Nginx 正在尝试打开文件而不是重定向到代理
- python - _joint_log_likelihood 给我错误的值
- sql - 如何按日期获取最后一件商品的价格
- python-3.x - 定期执行功能而不停止其他操作
- r - 使用 R 从 PDF 表单到数据框的文本挖掘
- r - 如果 r 中出现错误,则转到 lapply() 的下一次迭代