如何使用 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 之间是相同的。
我已经为我的纯 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 之间是相同的。