如何使用 docker 容器中的 Singularity 运行 python 程序?

How to run a python program using Singularity from a docker container?

我已经为我的纯 python 程序创建了一个 docker 容器,并设置了 python main.py 在容器为 运行 时执行。 运行 容器在我的本地机器上按预期工作。但是,我想 运行 我所在机构的高性能集群上的容器。集群机器使用 Singularity,我用它来拉取我在 Dockerhub 上托管的 docker 图像(存储库是 darshank11/ga_paci_final)。但是,当我尝试 运行 Singularity 容器时,出现以下错误:python3: can't open file 'main.py': [Errno 2] No such file or directory.

我尝试更改 Dockerfile 中的基础映像,例如从 FROM python:latest 更改为 FROM ubuntu:latest. 我已确保 docker 容器在我的本地计算机上运行,然后让我的一位同事从 Dockerhub 中拉出容器,运行 也把它拉出来。在我到达 Singularity 之前一切正常。

这是我的 docker 文件:

FROM ubuntu:16.04

RUN apt-get update -y && \
    apt-get install -y python3-pip python3-dev

RUN mkdir src
WORKDIR /src
COPY . /src

RUN pip3 install --upgrade pip
RUN pip3 install -r requirements.txt

CMD ["python3", "-u", "main.py"]

您收到该错误是因为执行上下文不是您所期望的。奇点中的运行路径是主机上的当前目录OS(例如~/ga_paci_final),已挂载到奇点镜像中。

如评论中所述,一种解决方案是在 docker CMD 语句中给出 python 文件的完整路径。另一种选择是将 %runscript 奇点定义文件块修改为类似以下内容:

%runscript
    cd /src
    python3 -u main.py

这样可以确保 运行 环境在 Docker 和 Singularity 之间是相同的。