Проверка наличия подходящего прокси

Я установил внутренний прокси-сервер apt, который в основном используется моими контейнерами Docker для нашей среды разработки.

И, таким образом, по моему Dockerfile Я мог бы иметь:

FROM ubuntu
RUN echo 'Acquire::http::Proxy "http://<proxy-ip>:<proxy-port>/";' > /etc/apt/apt.conf.d/proxy.conf

Но это будет работать только тогда, когда я создаю свой образ Docker внутри брандмауэра.

Так как я также хочу построить этот образ Docker на хосте облачной службы, к которому он не сможет получить доступ: также это не имеет смысла, поэтому я решил поставить проверку перед настройкой клиента apt-proxy:

RUN <check-connection> http://<proxy-ip>:<proxy-port>/ && \
    echo 'Acquire::http::Proxy "http://<proxy-ip>:<proxy-port>/";' > /etc/apt/apt.conf.d/proxy.conf

Так как я бегу это на голых костях ubuntu Изображение докера, когда apt еще не настроен, я несколько ограничен в том, что <check-connection> инструмент может быть, чтобы убедиться, что http://<proxy-ip>:<proxy-port>/ отвечает, как и ожидалось.

Лучшее решение, которое я получил, это спросить apt Сам проверить, может ли он подключиться:

apt -o Acquire::http::Proxy="http://<proxy-ip>:<proxy-port>/" update

Это работает довольно хорошо, когда мой прокси-сервер может ответить, но если не произойдет, потребуется много времени для сбоя.

Следующее, что я сделал, это использовал timeout Утилита для ограничения времени до сбоя:

timeout 10 apt -o Acquire::http::Proxy="http://<proxy-ip>:<proxy-port>/" update

Но время ожидания (здесь 10 секунд) может быть и слишком коротким, и слишком длинным.

Итак, мой вопрос: на чистом хосте Debian (читайте Docker ubuntu image), какой самый лучший (самый быстрый и надежный) способ проверить, доступен ли apt-прокси?


Изменить: оригинальный вопрос упоминается debian:9 образ докера, но для соответствия рекомендациям ask-ubuntu я также проверил его ubuntu:latest, получил тот же результат и обновил вопрос.

1 ответ

Вы можете проверить, можно ли установить TCP-соединение с данным хостом и портом, используя bash:

bash -c 'read -t0 < /dev/tcp/<proxy-ip>/<proxy-port>'

Это не проверяет, является ли служба на другом конце прокси, а просто проверяет, прослушивает ли что-то на другом конце.

Другим вариантом будет запустить apt-get для одного репозитория, например, написав deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) restricted в файл и используя его в качестве источника.

Другие вопросы по тегам