api-get „Błąd odczytu z serwera” w Dockerze

14

Korzystam z następującego polecenia w Bash:

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

Działa, ale kończy się niepowodzeniem w środku:

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]

I dlatego cała operacja kończy się niepowodzeniem z błędem

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?

Korzystam z tego w ramach kompilacji Docker. Mój plik Docker czyta

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

i biegnę docker build -t my-base:latest .

apt-getPolecenie powiedzie raz na jakiś czas, a nie raz na jakiś czas bez mojego zmieniwszy wszystko. To wydaje się zawsze udaje, gdy uruchomię go na moim komputerze lokalnym rozwoju, ale nie często (ale nie zawsze!), Gdy uruchomię go na maszynie EC2. Co więcej, wydaje się, że biegnie apt-get updatedwa razy z rzędu przed apt-get installpomocą. Jednak wcale nie jestem pozytywny z tych dwóch ostatnich zdań.

Jakieś pomysły, co może się dziać? Czy może być coś w apt-get, które buforuje znacznik czasu, a następnie oczekuje, że będzie aktualne?

Nathaniel Waisbrot
źródło

Odpowiedzi:

22

Jest to problem, który częściej będzie występować w przypadku obrazów Docker, ponieważ repozytoria, do których uzyskujesz dostęp, często się zmieniają, ale obraz podstawowy (i jego buforowane metadane) nie.

Spróbuj uruchomić apt-get clean && apt-get updateprzed zainstalowaniem pakietów.

James Yale
źródło