Docker构建报错:COPY /lib/x86_64-linux-gnu/libc.so.6文件未找到
解决Ubuntu 18.04 Docker镜像构建中COPY libc.so.6失败的问题
问题描述
构建基于ubuntu:18.04的Docker镜像时,执行COPY /lib/x86_64-linux-gnu/libc.so.6 /usr/local/lib/命令报错,提示文件未找到。
完整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
错误日志
=> 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
解决方案
核心问题
COPY命令是从宿主机的构建上下文目录复制文件到容器内,你指定的/lib/x86_64-linux-gnu/libc.so.6是容器内部的路径,宿主机上不存在该路径(或路径不匹配),因此报错文件未找到。
修复步骤
将Dockerfile中的COPY命令替换为RUN cp命令,在容器内部执行复制操作:
# 替换前 COPY /lib/x86_64-linux-gnu/libc.so.6 /usr/local/lib/ # 替换后 RUN cp /lib/x86_64-linux-gnu/libc.so.6 /usr/local/lib/
解释
RUN命令在镜像构建过程中执行容器内的shell命令,此时基于ubuntu:18.04镜像的容器内已经存在/lib/x86_64-linux-gnu/libc.so.6文件,用cp命令可直接在容器内部完成文件复制,不会出现路径不存在的问题。
替换后重新构建镜像即可解决该错误。
内容的提问来源于stack exchange,提问作者NobinPegasus
相关产品推荐
相关产品推荐

