我有以下奇点定义文件:
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
正在从主机安装。
- docker镜像被提取到磁盘
- 你的文件是现在被复制到提取的图像中
/var/tmp
- 当构建
%post
运行时,主机的 tmp 目录被挂载到容器中。这会隐藏复制到提取的图像中的文件。它应该适用于不是
/tmp
/var/tmp
/home
等的路径。
还另一条评论来自 github 中的另一个问题:
...主机 /tmp 和 /var/tmp 在 %post 期间安装在 /tmp 和 /var/tmp 容器目录的顶部...
您有两个选择:
- 将文件复制到其他文件夹而不是
/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
from 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