api-get "Fehler beim Lesen vom Server" unter Docker

14

Ich führe den folgenden Befehl in Bash aus:

DEBIAN_FRONTEND=noninteractive apt-get update -qq \
  && apt-get install -y build-essential git libncurses5-dev openssl \
     libssl-dev  fop xsltproc unixodbc-dev curl

Es läuft, scheitert aber in der Mitte:

Get:96 http://security.debian.org/ jessie/updates/main linux-libc-dev amd64 3.16.7-ckt9-3~deb8u1 [991 kB]
Get:97 http://security.debian.org/ jessie/updates/main curl amd64 7.38.0-4+deb8u2 [200 kB]
Get:98 http://security.debian.org/ jessie/updates/main openjdk-7-jre amd64 7u79-2.5.5-1~deb8u1 [176 kB]
Get:99 http://http.debian.net/debian/ jessie/main libgtk2.0-0 amd64 2.24.25-3 [2301 kB]
Err http://http.debian.net/debian/ jessie/main dpkg-dev all 1.17.25
  Error reading from server. Remote end closed connection [IP: 176.9.184.93 80]
Get:100 http://http.debian.net/debian/ jessie/main libatk-wrapper-java all 0.30.5-1 [30.3 kB]
Get:101 http://http.debian.net/debian/ jessie/main libatk-wrapper-java-jni amd64 0.30.5-1 [24.8 kB]
Get:102 http://http.debian.net/debian/ jessie/main libatomic1 amd64 4.9.2-10 [8992 B]
Get:103 http://http.debian.net/debian/ jessie/main libavahi-glib1 amd64 0.6.31-5 [36.4 kB]

Und deshalb schlägt die ganze Operation mit dem Fehler fehl

E: Failed to fetch http://http.debian.net/debian/pool/main/d/dpkg/dpkg-dev_1.17.25_all.deb  Error reading from server. Remote end closed connection [IP: 176.9.184.93 80]

E: Unable to fetch some archives, maybe run apt-get update or try with --fix-missing?

Ich führe dies als Teil eines Docker-Builds aus. Mein Dockerfile liest

FROM debian:jessie
RUN DEBIAN_FRONTEND=noninteractive  \
    apt-get update -qq \
    && apt-get install -y \
       build-essential \
       git \
       libncurses5-dev \
       openssl \
       libssl-dev \
       fop \
       xsltproc \
       unixodbc-dev \
       curl

und ich renne docker build -t my-base:latest .

Der apt-getBefehl ist manchmal erfolgreich und schlägt manchmal fehl, ohne dass ich etwas geändert habe. Es scheint immer erfolgreich zu sein, wenn ich es auf meinem lokalen Entwicklungscomputer ausführe, aber es schlägt häufig (aber nicht immer!) Fehl, wenn ich es auf einem EC2-Computer ausführe. Außerdem scheint es, apt-get updateals würde man vor den apt-get installHilfen zweimal hintereinander laufen . Die letzten beiden Sätze finde ich allerdings überhaupt nicht gut.

Irgendwelche Ideen, was passieren könnte? Könnte es etwas in apt-get geben, das einen Zeitstempel zwischenspeichert und dann erwartet, dass er aktuell ist?

Nathaniel Waisbrot
quelle

Antworten:

22

Dieses Problem tritt bei Docker-Images häufiger auf, da sich die Repositorys, auf die Sie zugreifen, häufig ändern, das Basisimage (und die zwischengespeicherten Metadaten) jedoch nicht.

Versuchen apt-get clean && apt-get updateSie es vor der Installation von Paketen.

James Yale
quelle