Ошибка 400 Bad Request для apt-get install каждый раз, когда я пытаюсь собрать свой образ Docker Ubuntu 16.04

Вопрос или проблема

Я пытаюсь создать образ Docker с требованиями, указанными в requirements.txt. Однако, пытаясь собрать файл, я получаю следующую ошибку:

E: Не удалось получить http://us.archive.ubuntu.com/ubuntu/pool/main/l/linux-atm/libatm1_2.5.1-1.5_amd64.deb  400  Неверный запрос [IP: 91.189.91.39 80]

E: Не удалось получить http://us.archive.ubuntu.com/ubuntu/pool/main/p/popt/libpopt0_1.16-10_amd64.deb  400  Неверный запрос [IP: 91.189.91.39 80]

E: Не удалось получить http://us.archive.ubuntu.com/ubuntu/pool/main/libc/libcap-ng/libcap-ng0_0.7.7-1_amd64.deb  400  Неверный запрос [IP: 91.189.91.39 80]

Я пытался сменить зеркала, проверил вывод cat /etc/apt/sources.list, пытался добавить флаг –fix-missing и пытался создать образ с –no-cache, но все напрасно.

Вот Dockerfile:

# Базовый образ
FROM ubuntu:16.04

MAINTAINER Siddhanth Ajri "[email protected]"

RUN cat /etc/apt/sources.list

# Смена на американские зеркала UBUNTU
RUN sed -i'' 's/archive\.ubuntu\.com/us\.archive\.ubuntu\.com/' /etc/apt/sources.list

# Установка зависимостей
RUN apt-get update && apt-get install -y \
    software-properties-common \
    curl \
    git

#RUN add-apt-repository universe

RUN apt-get update && apt-get install -y \
    curl \
    git 

RUN apt-get install python3.7

RUN apt-get install python3-pip

# Обновление pip до версии 20.x
RUN pip3 install -U pip

COPY ./requirements.txt /requirements.txt

WORKDIR /

RUN pip3 install -r requirements.txt

COPY . /

Ни одно из упомянутых решений, которые я пока нашел, не смогло решить эту проблему для меня.

Мне удалось обойти эту очень раздражающую проблему, настроив HTTP-прокси apt так, чтобы использовать мой интернет-прокси напрямую. Неясно, почему невидимый прокси работает для некоторых пакетов, но не для других, но явная установка прокси решила проблему.

Смотрите Невозможно установить пакеты с помощью apt-get update в Debian (Proxy) для примеров настройки прокси.

Я использовал метод /etc/apt/apt.conf.d/30proxy.conf, создав файл, который содержал:

Acquire::http { Proxy "http://192.168.0.1:3128" }

где http://192.168.0.1:3128 — это прокси squid.

Ответ или решение

Ошибка Bad Request 400 при попытке установить пакеты с помощью apt-get в Docker Ubuntu 16.04

При работе с Docker и попытке собрать образ на базе Ubuntu 16.04, многие пользователи сталкиваются с ошибками при выполнении команды apt-get install. В вашем случае ошибка звучит как "400 Bad Request", что указывает на проблемы с соединением при попытке загрузить пакеты. Давайте рассмотрим возможные причины и решения этой проблемы.

Причины

  1. Проблемы с репозиториями: Основная причина таких проблем обычно заключается в том, что репозиторий, к которому вы обращаетесь, недоступен или имеет неправильную конфигурацию. Похоже, что вы уже поменяли зеркало и проверили файл sources.list, что является правильным шагом.

  2. Неправильная конфигурация прокси: Если вы находитесь за корпоративным или локальным прокси, пакетный менеджер может иметь проблемы с доступом к репозиториям. Это может привести к ошибкам 400.

  3. Сетевые проблемы: Иногда в связи с перегрузками или сбоями в сети могут возникнуть временные проблемы с доступом к репозиториям.

Решения

  1. Проверка и изменение репозиториев:
    Убедитесь, что вы используете актуальные зеркала. В файле /etc/apt/sources.list проверьте, чтобы строки выглядели примерно так:

    deb http://archive.ubuntu.com/ubuntu/ xenial main restricted universe multiverse
    deb http://archive.ubuntu.com/ubuntu/ xenial-updates main restricted universe multiverse
    deb http://archive.ubuntu.com/ubuntu/ xenial-security main restricted universe multiverse

    Обратитесь к официальной документации для получения актуальных зеркал и их конфигурации.

  2. Настройка прокси:
    Если вы находитесь за прокси, следующая конфигурация может решить вашу проблему. Создайте файл /etc/apt/apt.conf.d/30proxy.conf и добавьте в него содержание:

    Acquire::http::Proxy "http://192.168.0.1:3128";

    Убедитесь, что 192.168.0.1:3128 — это ваш корректный адрес прокси. Эта настройка помогает apt корректно взаимодействовать с сетью.

  3. Отключение IPv6:
    В некоторых случаях проблемы могут быть связаны с использованием IPv6. Попробуйте временно отключить его, добавив строку в файл /etc/sysctl.conf:

    net.ipv6.conf.all.disable_ipv6 = 1

    После внесения изменений выполните команду:

    sudo sysctl -p
  4. Проверка DNS:
    Иногда проблемы могут возникать из-за неправильно настроенных DNS. Попробуйте использовать общедоступные DNS-серверы, такие как Google (8.8.8.8 и 8.8.4.4). Вы можете добавить их в файл /etc/resolv.conf:

    nameserver 8.8.8.8
    nameserver 8.8.4.4
  5. Логи и диагностика:
    Если вышеуказанные шаги не помогут, вы можете также просмотреть логи Docker и apt. Это может дать больше информации о том, что именно идет не так. Запустите команду:

    docker logs <container_id>

Заключение

Ошибка "400 Bad Request" при выполнении команд apt-get в Docker на Ubuntu 16.04 может быть вызвана различными факторами, включая неправильные конфигурации репозиториев или проблемы с прокси. Опираясь на представленные рекомендации, вы сможете диагностировать и решить проблему. Не забывайте, также, проверять стабильность соединения с интернетом и возможность доступа к репозиториям из вашей сети.

Оцените материал
Добавить комментарий

Капча загружается...