从现有 docker 图像扩展奇点图像的问题
Problem to extend a Singularity image from an existing docker image
我尝试用我的定义文件扩展 pytorch docker image 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?
简短回答:%post
中 $PATH
的值与 运行 中 shell 中的值不同,因此它不知道去哪里看
如果您查看 pip 在 docker 或奇点图像中的位置 (which pip
),它位于 /opt/conda/bin/pip
。 %post
中使用的默认路径是 /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
.
当您看到一个错误,指出当 运行 作为脚本的一部分时命令不可用,但当您 运行 交互时,它几乎总是一个环境问题并且 [= 16=、PYTHONPATH
、PERL5LIB
等是常见的罪魁祸首。
如果将 export PATH=/opt/conda/bin:$PATH
添加到 %post
块的开头,应该可以解决此问题。
我尝试用我的定义文件扩展 pytorch docker image 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?
简短回答:%post
中 $PATH
的值与 运行 中 shell 中的值不同,因此它不知道去哪里看
如果您查看 pip 在 docker 或奇点图像中的位置 (which pip
),它位于 /opt/conda/bin/pip
。 %post
中使用的默认路径是 /bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
.
当您看到一个错误,指出当 运行 作为脚本的一部分时命令不可用,但当您 运行 交互时,它几乎总是一个环境问题并且 [= 16=、PYTHONPATH
、PERL5LIB
等是常见的罪魁祸首。
如果将 export PATH=/opt/conda/bin:$PATH
添加到 %post
块的开头,应该可以解决此问题。