提问者:小点点

有没有一种优雅的方法让conda在docker构建期间安装第三方Go语言包?


我正在准备一个带有Ubuntu v18的docker映像。04用于s/w开发。我包括miniconda来管理开发环境,这都是golang。我使用YAML文件创建环境:

RUN conda env create --file goDev.yml

我还希望在docker启动时激活conda环境。这有点棘手,b/c conda必须首先初始化,但JaegerP提供了一个很好的解决方法,涉及到更新。谢谢。

不幸的是,我还需要在golang上安装第三方YAML包。我必须激活环境才能安装软件包,因此它让我回到了JaegerP帮助我克服的原始问题:在环境初始化之前我无法激活环境,在docker build b/c期间我无法初始化,我必须重新启动shell。

换句话说,这工作得很好:

运行conda env create--file goDev。yml

当docker启动时,所需的conda环境被激活,不幸的是没有安装外部YAML包。这不起作用b/c conda环境在初始化之前不能被激活,初始化需要重新启动shell:

运行conda env create--file goDev。yml

我可以更新。如果此文件不存在,请进一步安装YAML包:

/root/go/pkg/mod/cache/download/gopkg.in/yaml.v2

是否有一个更优雅的解决方案,使我能够在docker构建期间安装第三方golang包,而不是在每次运行映像时检查它?


共1个答案

匿名用户

conda run函数提供了一种在环境上下文中运行代码的干净方法,而无需手动激活。试试类似的东西

RUN conda env create --file goDev.yml 
  && rm goDev.yml 
  && conda run -n go_dev go get gopkg.in/yaml.v2 
  && echo '. /opt/conda/etc/profile.d/conda.sh && conda activate go_dev' >> ${HOME}/.bashrc

此外,您可能希望使用结束所有涉及Conda的跑步链

conda clean -qafy

以帮助最小化Docker图像层大小。