%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

これら2つのファイルが実際にコピーされたことを確認するために定義ファイルに割り当てました\tmpls -l /tmpこのファイルはに見つかりません\tmp。また、定義ファイルで指定してファイルの1つを検索しましたが、次の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

次のコメントを参照してください。フラッグハブ:

ビルド時にホスト/var/tmpシステムからインストールされます。

  1. ドッカーイメージがディスクに抽出されます。
  2. あなたのファイルはいこれで抽出された画像にコピーされます。/var/tmp
  3. ビルドが%post実行されると、ホストの tmp ディレクトリがコンテナにマウントされます。これにより、抽出された画像にコピーされたファイルが非表示になります。

/tmp /var/tmp /homeそれ以外のパスでも機能する必要があります。

返品別のコメントgithubのもう一つの問題:

...ホスト/ tmpおよび/ var / tmpは、%post中に/ tmpおよび/ var / tmpコンテナディレクトリの上にマウントされます。

2つのオプションがあります。

  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

/tmpホストは/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

関連情報