当使用 %files 从主机复制到奇点映像时,奇点构建错误“没有这样的文件或目录”

当使用 %files 从主机复制到奇点映像时,奇点构建错误“没有这样的文件或目录”

我有以下奇点定义文件:

Bootstrap: docker
From: nvcr.io/nvidia/tensorflow:21.08-tf2-py3

%files
    /home/zfan/sandbox/Virgo_Algo/DevEnv/AMD/requirements.txt /tmp/requirements.txt
    /home/zfan/sandbox/Virgo_Algo/DevEnv/AMD/aocl-linux-aocc-2.2.0_1_amd64.deb /tmp/aocl-linux-aocc-2.2.0_1_amd64.deb

%environment
    export JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
    export LD_LIBRARY_PATH="/usr/local/lib/kla:${LD_LIBRARY_PATH}"
    export MODEL_PATH="/home/data"
    export LD_LIBRARY_PATH="/usr/local/lib/tensorflow:/usr/local/lib/python3.8/dist-packages/tensorflow/:${LD_LIBRARY_PATH}"
    export LD_LIBRARY_PATH="/opt/amd-fftw/lib:${LD_LIBRARY_PATH}"

%post
    echo 'debconf debconf/frontend select Noninteractive' | debconf-set-selections
    dpkg -i /tmp/aocl-linux-aocc-2.2.0_1_amd64.deb && rm -rf /tmp/aocl-linux-aocc-2.2.0_1_amd64.deb
    python -m pip install --upgrade pip
    pip --no-cache-dir --no-cache install --user -r /tmp/requirements.txt

当我构建奇点图像时,出现以下错误:ERROR: Could not open requirements file: [Errno 2] No such file or directory: '/tmp/requirements.txt'error: cannot access archive '/tmp/aocl-linux-aocc-2.2.0_1_amd64.deb': No such file or directory

据我了解,%files 已经将相应的文件复制到映像中的 /tmp 中。但是,当我检查构建日志时,我看到以下消息:INFO: Copying /home/zfan/sandbox/Virgo_Algo/DevEnv/AMD/requirements.txt to /tmp/build-temp-687487635/rootfs/tmp/requirements.txt INFO: Copying /home/zfan/sandbox/Virgo_Algo/DevEnv/AMD/aocl-linux-aocc-2.2.0_1_amd64.deb to /tmp/build-temp-687487635/rootfs/tmp/aocl-linux-aocc-2.2.0_1_amd64.deb

为了看看这两个文件是否真的被复制到了\tmp,我ls -l /tmp在定义文件中指定了。在 中找不到这些文件\tmp。我还通过在定义文件中指定来搜索其中一个文件find / -name aocl-linux-aocc-2.2.0_1_amd64.deb,但出现以下错误:find: File system loop detected; ‘/tmp/build-temp-565811705/rootfs’ is part of the same file system loop as ‘/’

答案1

请注意以下评论github

在构建时,/var/tmp正在从主机安装。

  1. docker镜像被提取到磁盘
  2. 你的文件现在被复制到提取的图像中/var/tmp
  3. 当构建%post运行时,主机的 tmp 目录被挂载到容器中。这会隐藏复制到提取的图像中的文件。

它应该适用于不是/tmp /var/tmp /home等的路径。

另一条评论来自 github 中的另一个问题:

...主机 /tmp 和 /var/tmp 在 %post 期间安装在 /tmp 和 /var/tmp 容器目录的顶部...

您有两个选择:

  1. 将文件复制到其他文件夹而不是/tmp,例如:/opt
%files
    /home/zfan/sandbox/Virgo_Algo/DevEnv/AMD/requirements.txt /opt/requirements.txt
    /home/zfan/sandbox/Virgo_Algo/DevEnv/AMD/aocl-linux-aocc-2.2.0_1_amd64.deb /opt/aocl-linux-aocc-2.2.0_1_amd64.deb

...

%post
    ...
    dpkg -i /opt/aocl-linux-aocc-2.2.0_1_amd64.deb && rm -rf /opt/aocl-linux-aocc-2.2.0_1_amd64.deb
    ...
    pip --no-cache-dir --no-cache install --user -r /opt/requirements.txt
  1. 在本%post节中,使用来自的文件$SINGULARITY_CONTAINER/tmp而不是/tmp.

由于/tmpfrom the host 安装在/tmp容器内部,$SINGULARITY_CONTAINER因此将指向用于构建 ( /tmp/build-temp-XXX/rootfs) 的容器的根文件系统,并且$SINGULARITY_CONTAINER/tmp/tmp/build-temp-XXX/rootfs/tmp来自主机,这是文件复制到的位置。

%post
    ...
    dpkg -i $SINGULARITY_CONTAINER/tmp/aocl-linux-aocc-2.2.0_1_amd64.deb && rm -rf $SINGULARITY_CONTAINER/tmp/aocl-linux-aocc-2.2.0_1_amd64.deb
    ...
    pip --no-cache-dir --no-cache install --user -r $SINGULARITY_CONTAINER/tmp/requirements.txt

相关内容