从现有 docker 镜像扩展 Singularity 镜像的问题

我尝试使用我的定义文件扩展pytorch docker 映像nnunet.def

Bootstrap: docker

From: pytorch/pytorch:1.4-cuda10.1-cudnn7-runtime


%post

    git clone https://github.com/NVIDIA/apex

    cd apex

    pip install -v --no-cache-dir ./


%runscript

    echo "Running nnunet container..."


但是,当我构建此图像(使用sudo singularity build image.sif nnunet.def)时,我收到一条错误消息,指出未找到 pip:


...

+ pip install -v --no-cache-dir ./

/.build-script-post: 6: /.build-script-post: pip: not found

FATAL:   failed to execute %post proc: exit status 127

FATAL:   While performing build: while running engine: while running /usr/local/libexec/singularity/bin/starter: exit status 255

为什么?


更令人惊讶的是,当我直接从这张图片进入 shell 时: singularity shell docker://pytorch/pytorch:1.4-cuda10.1-cudnn7-runtime


我使用 pip 没有问题:


Singularity> pip freeze

asn1crypto==1.2.0

backcall==0.1.0

...

为什么我不能在%post定义文件的部分中使用 pip?


30秒到达战场
浏览 162回答 1
1回答

呼啦一阵风

$PATH简短的回答: in的值%post与您在 shell 中运行时不同,因此它不知道去哪里查找。如果您查看 pipwhich pip在 docker 或奇异点映像中的位置 ( ),您会发现它位于/opt/conda/bin/pip。使用的默认路径%post是/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin.当您看到一条错误,指出命令在作为脚本的一部分运行时不可用,但在交互运行时却可用,这几乎总是环境问题,而 、 、 等PATH是PYTHONPATH常见PERL5LIB的罪魁祸首。如果您添加export PATH=/opt/conda/bin:$PATH到块的开头,%post它应该可以解决这个问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python