无法计算缓存键:无法计算参考a298254 a-94 ff-4 e45-....的校验和:“/lib/x86_64-linux-gnu/libc.so.6”:未找到

oxcyiej7  于 2023-06-29  发布在  Linux
关注(0)|答案(1)|浏览(229)

这是我的Dockerfile:

FROM ubuntu:18.04

ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get install -y apt-utils apt-transport-https && \
    apt-get install -y  lib32z1 xinetd && \
    apt-get -y dist-upgrade

RUN useradd -m ctf

WORKDIR /home/ctf

RUN cp -Rf /lib* /home/ctf && \
    cp -Rf /usr/lib* /home/ctf

COPY /lib/x86_64-linux-gnu/libc.so.6 /usr/local/lib/
ENV LD_LIBRARY_PATH=/usr/local/lib/
RUN ldconfig

RUN mkdir /home/ctf/dev && \
    mknod /home/ctf/dev/null c 1 3 && \
    mknod /home/ctf/dev/zero c 1 5 && \
    mknod /home/ctf/dev/random c 1 8 && \
    mknod /home/ctf/dev/urandom c 1 9 && \
    chmod 666 /home/ctf/dev/*

RUN mkdir /home/ctf/bin && \
    cp /bin/sh /home/ctf/bin && \
    cp /bin/ls /home/ctf/bin && \
    cp /bin/cat /home/ctf/bin

COPY ./ctf.xinetd /etc/xinetd.d/ctf
COPY ./xinetedService.sh /xinetedService.sh
RUN echo "Blocked by ctf_xinetd" > /etc/banner_fail

RUN chmod +x /xinetedService.sh

COPY ./files/ /home/ctf/
RUN chown -R root:ctf /home/ctf && \
    chmod -R 750 /home/ctf && \
    chmod 740 /home/ctf/flag.txt

CMD ["/xinetedService.sh"]

EXPOSE 9999

下面的行给出错误。COPY /lib/x86_64-linux-gnu/libc.so.6 /usr/local/lib/
错误:

=> ERROR [ 6/15] COPY /lib/x86_64-linux-gnu/libc.so.6 /usr/local/lib/                                                                                                                   0.0s
------
 > [ 6/15] COPY /lib/x86_64-linux-gnu/libc.so.6 /usr/local/lib/:
------
Dockerfile:16
--------------------
  14 |         cp -Rf /usr/lib* /home/ctf
  15 |     
  16 | >>> COPY /lib/x86_64-linux-gnu/libc.so.6 /usr/local/lib/
  17 |     ENV LD_LIBRARY_PATH=/usr/local/lib/
  18 |     RUN ldconfig
--------------------
ERROR: failed to solve: failed to compute cache key: failed to calculate checksum of ref a298254a-94ff-4e45-b581-67b72180e20a::opz82ic9gri5w5vumh2zpzlew: "/lib/x86_64-linux-gnu/libc.so.6": not found
mwyxok5s

mwyxok5s1#

你不能从主机系统COPY任意文件到镜像中,只能是属于 *build context目录 * 的文件;也就是作为最后一个参数传递给docker build的目录名,通常是当前目录.
在您的情况下,您根本不需要此COPYubuntu基本映像已经包含了一个动态加载器和正常Linux运行时的其余部分。您也不需要创建一个影子/dev树或一个单独的/home/.../bin目录,其中包含系统二进制文件的副本。
如果你确实有不寻常的需求,需要手动操作系统C库之类的东西,记住Docker镜像有一个独立的文件系统也会有帮助。如果您从源代码构建GNUlibc,那么镜像中的/lib树将与主机和其他容器的/lib目录隔离。这可能是尝试自己构建Linux映像FROM scratch的一种方法;一方面,这是一个Maven级的项目,但另一方面,学习在容器中完成它将使您不会使主机无法使用。

相关问题