503 Услуга не е налична: Как да убедите докера да актуализира своите зависимости от ubuntu

Наскоро се опитвах да изградя докер контейнер на моя MacOS и по този начин се натъкнах на проблема, че контейнерът на докер не е в състояние да изтегли зависимости от ubuntu.

Тъй като на моите колеги и на мен ми отне доста време да разберат решението на този проблем, надявам се, че следната документация за нашия подход и окончателното решение ще ви помогне да спестите няколко часа изследвания.

Съобщението за грешка

Един от контейнерите за докер, който получих от моя клиент, не е изграден на моята машина. За всички останали колеги от екипа ми се получи отлично. Но моят терминал заяви, че услугата ubuntu не е налична:

W: Репозиторият „http://security.ubuntu.com/ubuntu xenial-security Release“ няма файл за издаване. W: хранилището „http://archive.ubuntu.com/ubuntu xenial Release“ няма файл за издаване. W: Репозиторият „http://archive.ubuntu.com/ubuntu xenial-updates Release“ няма файл за издаване. W: Репозиторият „http://archive.ubuntu.com/ubuntu xenial-backports Release“ няма файл за издаване. E: Неуспешно извличане http://security.ubuntu.com/ubuntu/dists/xenial-security/main/binary-amd64/Packages 503 Услугата не е достъпна [IP: 91.189.91.14 80] E: Неуспешно извличане http: // archive.ubuntu.com/ubuntu/dists/xenial/main/binary-amd64/Packages 503 Услугата не е налична [IP: 91.189.88.174 80] E: Неуспешно извличане http://archive.ubuntu.com/ubuntu/dists/xenial -updates / main / binary-amd64 / пакети 503 Услугата не е налична [IP: 91.189.88.174 80] E: Неуспешно извличане http://archive.ubuntu.com/ubuntu/dists/xenial-backports/main/binary-amd64/ Пакети 503 Услугата не е налична [IP: 91.189.88.162 80] E: Някои индексни файлове не можаха да се изтеглят. Те са игнорирани или са използвани стари.

Първо, първо проверих дали IP-адресите всъщност са достъпни от моята локална машина:

wget http://security.ubuntu.com/ubuntu wget http://archive.ubuntu.com/ubuntu

И двата адреса могат да бъдат разрешени и достигнати. За да изключите възможен страничен ефект от всяка друга команда в Dockerfile, създадох прост Dockerfile, който изгражда само среда на ubuntu.

ОТ ubuntu: 16.04 RUN apt-get update CMD [“/ bin / bash”]

Той също не работи и доведе до същите 503 съобщения за грешки.

Google отбеляза хит със следната статия, която предложи да проверите записите в DNS. За съжаление и това не помогна. Имаше само няколко други попадения с абсолютно същия код за грешка. Никой обаче не даде решение.

Именно тогава започна работата по детектива: Тъй като се появи код за грешка 503, имаше вероятност да е замесен неправилно прокси прокси. Въпреки това, аз не бях запознат с каквото и да е прокси. Ето защо започнах да проверявам всички петна на моята машина, където може да се скрият остатъци от бивша прокси инсталация:

1. Проверете cntlm.conf

Проверете дали можете да забележите някакви подозрителни редове във вашия файл cntlm.conf. Можете да намерите този файл под /usr/local/etc/cntlm.conf

2. Проверете хост файла

Проверете хост файла си за намеса. Можете да намерите файла под / etc / hosts

3. Проверете мрежовите прокси настройки

Отидете на System Preferences на вашия Mac. Отворете секцията Мрежа, изберете текущата си мрежа, отидете на Разширени> Прокси и проверете двойно настройките.

Може би една от стъпките по-горе вече е решила проблема ви. В моя случай не помогна. След като прекарах часове, които по принцип бяха изпълнени с повторно повторение на стъпките по-горе, най-накрая се озовах на доста очевидно - но за мен доста скрито - място:

4. Настройки за прокси на Docker Desktop

Проверете прокси настройките на приложението Docker Desktop.

Ако ръчният прокси е включен, това може да е това. Поне това е решило проблема за мен: Докер не използва системния прокси, а ръчен, който трябва да е бил конфигуриран случайно преди седмици. След превключване на настройката към System Proxy и двата Dockerfiles работиха перфектно.