次のような特異点定義ファイルがあります。
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つのファイルが実際にコピーされたことを確認するために定義ファイルに割り当てました\tmp
。ls -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
システムからインストールされます。
- ドッカーイメージがディスクに抽出されます。
- あなたのファイルはいこれで抽出された画像にコピーされます。
/var/tmp
- ビルドが
%post
実行されると、ホストの tmp ディレクトリがコンテナにマウントされます。これにより、抽出された画像にコピーされたファイルが非表示になります。
/tmp
/var/tmp
/home
それ以外のパスでも機能する必要があります。
返品別のコメントgithubのもう一つの問題:
...ホスト/ tmpおよび/ var / tmpは、%post中に/ tmpおよび/ var / tmpコンテナディレクトリの上にマウントされます。
2つのオプションがあります。
- 代わりにファイルを別のフォルダにコピーしてください
/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
- この
%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