Docker Debian apt Error Reading from Server

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 of apt-get clean does not work for me. Also I am surprised, if this is the case, that there are not more people having my issue.



  • How is it possible to extend docker php image with nodejs?
  • Docker container with it's own IP on a root server
  • Building a Docker image with deprecated dependencies
  • Confluence Error 500 while setup
  • Why doesn't “pip install” work with Flask and gevent inside a debian docker container?
  • Installing packages into ubuntu14.04 docker container
  • FROM debian:jessie
    RUN apt-get clean && apt-get update && apt-get install -y --no-install-recommends \
    $ docker build .
    docker build .
    Sending build context to Docker daemon 2.048 kB
    Step 0 : FROM debian:jessie
    ---> 4a5e6db8c069
    Step 1 : RUN apt-get clean && apt-get update && apt-get install -y --no-install-recommends     git
    ---> Running in 43b93e93feab
    Get:1 jessie/updates InRelease [63.1 kB]
    ... some omitted ...
    Get:6 jessie-updates/main amd64 Packages [3614 B]
    Fetched 9552 kB in 7s (1346 kB/s)
    Reading package lists...
    Reading package lists...
    Building dependency tree...
    Reading state information...
    The following extra packages will be installed:
    ... some omitted ...
    0 upgraded, 26 newly installed, 0 to remove and 0 not upgraded.
    Need to get 13.2 MB of archives.
    After this operation, 64.0 MB of additional disk space will be used.
    Get:1 jessie/updates/main libgnutls-deb0-28 amd64 3.3.8-6+deb8u2 [694 kB]
    ... some omitted ...
    Get:5 jessie/main libnettle4 amd64 2.7.1-5 [176 kB]
    Err jessie/main libffi6 amd64 3.1-2+b2
      Error reading from server. Remote end closed connection [IP: 80]
    ... some omitted ...
    Get:25 jessie/main git amd64 1:2.1.4-2.1 [3624 kB]
    Fetched 13.2 MB in 10s (1307 kB/s)
    E: Failed to fetch  Error reading from server. Remote end closed connection [IP: 80]
    E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?
    The command '/bin/sh -c apt-get clean && apt-get update && apt-get install -y --no-install-recommends     git' returned a non-zero code: 100

    Please note that I also posted here with a different issue. I believe it to be unrelated, but it may well actually be.

  • iptables rules break communication between Docker containers
  • Is there anyway to start rsyslogd without sudo access?
  • Use --build-arg value in Dockerfile FROM parameter
  • docker login with non interactive session returns 401
  • CentOS 6 Docker 1.7 with error “panic: runtime error: invalid memory address or nil pointer dereference”
  • How to mix several python scripts into a shell script?
  • 5 Solutions collect form web for “Docker Debian apt Error Reading from Server”

    The mirror is “magic” in that it will load-balance and geo-ip you to transparent increase performance and availability. I would therefore immediately suspect it of causing your problem, or at least be the first thing to rule out.

    I would check if you could:

    • Still reproduce the problem; will throw out “bad” mirrors from its internal lists so your issue may have been temporary.

    • Reproduce the problem with a different, mirror. Try something like If it then works with this mirror, do please contact the maintainer and report the issue to them. They are quite responsive and open to bug reports.

    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 with a single working domain
    # in attempt to "prevent" the "Error reading from server" error.
    RUN sed -i "s/`curl -s -D - | awk '/^Link:/ { print $2 }' | sed -e 's@<http://\(.*\)/debian/>;@\1@g'`/" /etc/apt/sources.list
    # Continue with your apt-get update...
    RUN apt-get update...

    What this command does is:

    1. Curl the 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 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.


    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, and you should see a link there like http://......./debian/. For example, at the point of writing, I saw

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

      RUN sed -i "s/" /etc/apt/sources.list

    I added apt-get clean to my dockerfile before the apt-get update line, it seems to have done the trick.

    I guess I have no way of knowing whether or not it was the extra command or if it was luck that fixed my build, but I took the advice from

    For those visiting with similar issues, using the --no-cache flag in the docker build may help. Similar issues (though not this exact one) can occur if the apt-get update is old and not being recalled sue to caching.

    Not enough reputation to comment on previous answers, so I will (confusingly) add a new answer:

    • I don’t think hardcoding a single mirror is really a viable solution, since as for example seen here, there’s a reason debian implemented the whole httpredir thing — mirrors go down or out of date.
    • I’ve dealt with this issue a lot of times, and the logs always indicate that docker’s actually running the apt-get command, which means –no-cache is unlikely to be fixing it — it’s just that if you rebuild, httpredir is likely to pick a different mirror, even if you don’t change anything in your docker file, and the build will work.
    Docker will be the best open platform for developers and sysadmins to build, ship, and run distributed applications.