首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头集装箱内的Micromamba

码头集装箱内的Micromamba
EN

Stack Overflow用户
提问于 2021-06-30 11:20:59
回答 1查看 1.4K关注 0票数 1

我有一个基本的码头形象:

代码语言:javascript
复制
FROM ubuntu:21.04

WORKDIR /app

RUN apt-get update && apt-get install -y wget bzip2 \
    && wget -qO-  https://micromamba.snakepit.net/api/micromamba/linux-64/latest | tar -xvj bin/micromamba \
    && touch /root/.bashrc \
    && ./bin/micromamba shell init -s bash -p /opt/conda  \
    && cp /root/.bashrc /opt/conda/bashrc \
    && apt-get clean autoremove --yes \
    && rm -rf /var/lib/{apt,dpkg,cache,log}

SHELL ["bash", "-l" ,"-c"]

并从中衍生出另一种:

代码语言:javascript
复制
ARG BASE
FROM $BASE

RUN source /opt/conda/bashrc && micromamba activate \
    && micromamba create --file environment.yaml -p /env

在构建第二个映像时,我得到以下错误: RUN部分的micromamba: command not found

  1. 如果我手动运行1 base映像,我可以启动micromamba,它正在正确运行。
  2. 我可以运行临时图像,这是为第二图像创建,微曼巴是可用的通过CLI,运行正确。
  3. 例如,如果我继承debian:buster或高山,那么它正在完美地构建。

Ubuntu有什么问题?为什么在第二码头形象建设中看不到micromamba

PS使用脚手架进行建筑,这样才能正确理解,$BASE在哪里,它是什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-05 04:23:33

ubuntu:21.04映像附带了一个以以下开头的/root/.bashrc文件:

代码语言:javascript
复制
# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

当第二个Dockerfile执行RUN source /opt/conda/bashrc时,没有设置PS1,因此bashrc文件的其余部分不执行。bashrc文件的其余部分是进行micromamba初始化的地方,包括用于激活micromamba环境的micromamba bash函数的设置。

debian:buster映像有一个更小的/root/.bashrc,它没有类似于[ -z "$PS1" ] && return的行,因此会加载micromamba函数。

高寒图像不附带/root/.bashrc,因此它也不包含提前退出文件的代码。

如果您想使用ubuntu:21.04映像,可以首先修改您的Dockerfile,如下所示:

代码语言:javascript
复制
FROM ubuntu:21.04

WORKDIR /app

RUN apt-get update && apt-get install -y wget bzip2 \
    && wget -qO-  https://micromamba.snakepit.net/api/micromamba/linux-64/latest | tar -xvj bin/micromamba \
    && touch /root/.bashrc \
    && ./bin/micromamba shell init -s bash -p /opt/conda  \
    && grep -v '[ -z "\$PS1" ] && return' /root/.bashrc  > /opt/conda/bashrc   # this line has been modified \
    && apt-get clean autoremove --yes \
    && rm -rf /var/lib/{apt,dpkg,cache,log}

SHELL ["bash", "-l" ,"-c"]

这将删除导致提前终止的一行。

或者,您可以使用现有的曼巴格/微曼巴坞映像。mambaorg/micromamba:latest是基于debian:瘦的,但是mambaorg/micromamba:jammy会给你一个基于ubuntu的映像(公开:我维护这个映像)。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68193812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档