Docker Debian apt Ошибка чтения с сервера
похоже, что apt-get имеет проблемы с подключением к серверам репозитория. Я полагаю, что это, вероятно, проблемы совместимости, Как упоминалось здесь, однако предлагаемое решение apt-get clean
не работает для меня. Также Я удивлен, если это так, что больше нет людей, имеющих мою проблему.
MWE
Dockerfile
FROM debian:jessie RUN apt-get clean && apt-get update && apt-get install -y --no-install-recommends git
$ 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 http://security.debian.org jessie/updates InRelease [63.1 kB]
... some omitted ...
Get:6 http://httpredir.debian.org 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 http://security.debian.org/ jessie/updates/main libgnutls-deb0-28 amd64 3.3.8-6+deb8u2 [694 kB]
... some omitted ...
Get:5 http://httpredir.debian.org/debian/ jessie/main libnettle4 amd64 2.7.1-5 [176 kB]
Err http://httpredir.debian.org/debian/ jessie/main libffi6 amd64 3.1-2+b2
Error reading from server. Remote end closed connection [IP: 176.9.184.93 80]
... some omitted ...
Get:25 http://httpredir.debian.org/debian/ 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 http://httpredir.debian.org/debian/pool/main/libf/libffi/libffi6_3.1-2+b2_amd64.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?
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
обратите внимание, что я также выложил здесь С a различный вопрос. Я считаю, что это не связано,но вполне может быть.
5 ответов
httpredir.debian.org зеркало "волшебно" в что оно нагрузк-баланс и гео-ИП вы к прозрачным представлению и наличию роста. Поэтому я бы сразу заподозрил, что это вызывает вашу проблему, или, по крайней мере, первое, что нужно исключить.
Я бы проверил, если бы вы могли:
еще воспроизвести проблему;
httpredir.debian.org
выбросит "плохие" зеркала из своих внутренних списков, поэтому ваша проблема может быть временный.воспроизвести проблему с иной, не-
httpredir.debian.org
зеркала. Попробуйте что-то вродеftp.de.debian.org
. Если он затем работает с этим зеркалом, пожалуйста, свяжитесь сhttpredir.debian.org
сопровождающий и сообщить о проблеме к ним. Они достаточно отзывчивы и открыты для сообщений об ошибках.
для тех, у кого есть проблема с этим, это моя попытка "исправить" проблему, заменив httpredir
С одним рабочим доменом всякий раз, когда Dockerfile строится:
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 }' | sed -e 's@<http://\(.*\)/debian/>;@@g'`/" /etc/apt/sources.list
# Continue with your apt-get update...
RUN apt-get update...
что делает эта команда-это:
- завивать
http://httpredir.debian.org/demo/debian/
от строительной машины, чтобы получить заголовки с демонстрационной страницы debian (-s
молчит, не выход.-D
для сброса заголовков) - извлеките заголовки, найдите
Link
фрагмент заголовка. Этот содержит лучший маршрут, рекомендованный httpredir. - последние
sed -e ...
- это извлечь доменное имя ссылки на Шаге 2. - затем, наконец, домен, найденный на Шаге 3, подается в глобальную команду sed и заменяет домен
httpredir.debian.org
нашли в/etc/apt/sources.list
.
это не исправление, а скорее простой хак, чтобы (значительно) уменьшить шансы на неудачную сборку. И... извините, если это выглядит странно, так как это мой девственный sed & piping попытка.
редактировать
на стороне записки, если домен, который он выбирает просто слишком медленно или не отвечает должным образом, вы можете сделать это вручную, путем
посетить http://httpredir.debian.org/demo.html, и вы должны увидеть ссылку там, как
http://......./debian/
. Например, в момент написания я увиделhttp://mirrors.tuna.tsinghua.edu.cn/debian/
-
вместо используйте этот вместо этого:
RUN sed -i "s/httpredir.debian.org/mirrors.tuna.tsinghua.edu.cn/" /etc/apt/sources.list
добавил apt-get clean
в мой dockerfile перед apt-get update
line, похоже, он сделал трюк.
Я думаю, у меня нет способа узнать, была ли это дополнительная команда или это была удача, которая исправила мою сборку, но я принял совет от https://github.com/CGAL/cgal-testsuite-dockerfiles/issues/19
для тех, кто посещает подобные вопросы, используя --no-cache
флаг в docker build
может помочь. Подобные проблемы (хотя и не этот точный) могут возникнуть, если обновление apt-get старое и не вызывается в кэширование.
недостаточно репутации, чтобы комментировать предыдущие ответы, поэтому я (смущенно) добавлю новый ответ:
- Я не думаю, что hardcoding одно зеркало действительно жизнеспособное решение, так как, например, видно здесь, есть причина, по которой debian реализовал всю вещь httpredir -- зеркала идут вниз или устарели.
- Я имел дело с этой проблемой много раз, и журналы всегда указывают, что docker фактически выполняет команду apt-get, что означает -- нет-кэш вряд ли будет исправлять его-просто если вы перестроите, httpredir, скорее всего, выберет другое зеркало, даже если вы ничего не измените в своем файле docker, и сборка будет работать.