Docker Debian apt Error Reading from Server

后端 未结 5 2705
梦如初夏
梦如初夏 2021-02-20 18:25

It would seem that apt-get is having issues connecting with the repository servers. I suppose it is likely compatibility issues, as mentioned here, however the proposed solution

5条回答
  •  轻奢々
    轻奢々 (楼主)
    2021-02-20 18:33

    For whoever is having an issue with this, this is my attempt to "fix" the issue by swapping out httpredir with a single working domain whenever the Dockerfile is being built:

    FROM debian:je...
    
    # Insert this line before "RUN apt-get update" to dynamically
    # replace httpredir.debian.org with a single working domain
    # in attempt to "prevent" the "Error reading from server" error.
    RUN sed -i "s/httpredir.debian.org/`curl -s -D - http://httpredir.debian.org/demo/debian/ | awk '/^Link:/ { print $2 }' | sed -e 's@;@\1@g'`/" /etc/apt/sources.list
    
    # Continue with your apt-get update...
    RUN apt-get update...
    

    What this command does is:

    1. Curl the http://httpredir.debian.org/demo/debian/ from the building machine to get the headers from debian demo page (-s is silent, don't output. -D is to dump headers)
    2. Extract the headers, find the Link header fragment. This contains the best route as recommended by httpredir.
    3. The last sed -e ... is to extract out the domain name of the link in step 2.
    4. Then finally, the domain found in step 3 is being feed into the global sed command, and replace the domain httpredir.debian.org found in /etc/apt/sources.list.

    This is not a fix, but rather a simple hack to (greatly) reduce the chances of failed build. And... pardon me if it looks weird, as it's my virgin sed & piping attempt.

    Edit

    On a side note, if the domain that it picks simply too slow or not responding as it should, you may want to do it manually by

    1. Visit http://httpredir.debian.org/demo.html, and you should see a link there like http://......./debian/. For example, at the point of writing, I saw http://mirrors.tuna.tsinghua.edu.cn/debian/

    2. Instead of the long RUN sed -i.... command, use this instead:

      RUN sed -i "s/httpredir.debian.org/mirrors.tuna.tsinghua.edu.cn/" /etc/apt/sources.list
      

提交回复
热议问题