Error reading from server - read (104: Connection reset by peer) [IP: 101.6.15.130 80]


本章节目录

    问题

    在使用 laradock 构建编译容器时报以下错误:

    E: Failed to fetch http://mirrors.tuna.tsinghua.edu.cn/debian/pool/main/libi/libice/libice-dev_1.0.10-1_amd64.deb Error reading from server - read (104: Connection reset by peer) [IP: 101.6.15.130 80]
    

    这会导致容器编译中断,无法继续使用。

    原因排查

    清华镜像源某些数据无法正常访问,可能是连接请求被拒绝(连接过多?请求 IP 被禁止?)或者资源不存在引起的。

    但是 laradock 的 Dockerfile 为什么会有这个国内镜像的链接地址呢?

    我们在 laradock 目录下搜索下 tsinghua,结果如下图所示,会发现有四行包含该词的代码,分布在php-fpm/Dockerfileworkspace/Dockerfile两个文件中

    查看代码

    # If you're in China, or you need to change sources, will be set CHANGE_SOURCE to true in .env.
    
    ARG CHANGE_SOURCE=false
    RUN if [ ${CHANGE_SOURCE} = true ]; then \
        # Change application source from deb.debian.org to aliyun source
        sed -i 's/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list && \
        sed -i 's/security.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list && \
        sed -i 's/security-cdn.debian.org/mirrors.tuna.tsinghua.edu.cn/' /etc/apt/sources.list \
    ;fi
    

    这样就明白了,因为国内网络的缘故,我们需要在 .env 文件中配置 CHANGE_SOURCE=true
    在编译容器的时候,判断我们开启CHANGE_SOURCE后,docker 会批量修改我们的镜像链为国内的mirrors.tuna.tsinghua.edu.cn,注:s/xxx/xxx/g是 vim 的批量替换命令。

    解决方案

    找到原因之后,我们就可以对症下药了。解决方法有两种:
    方法一.env 文件中把 CHANGE_SOURCE 参数重新设置为 false,不修改镜像源。不推荐,在国内使用的话,还会遇到访问慢且不稳定的问题。
    方便二 使用其它国内镜像源替换清华的镜像源,比如中科大 mirrors.ustc.edu.cn
    依次打开 php-fpm/Dockerfileworkspace/Dockerfile 文件,批量替换 mirrors.tuna.tsinghua.edu.cnmirrors.ustc.edu.cn,之后重新执行 docker-compose build 命令即可


    请先 登录
    审核后显示
    讨论记录(0 条)
    暂时还没有讨论

    © 2024 麻辣讲 豫ICP备19017310号-2