Проверка наличия подходящего прокси
Я установил внутренний прокси-сервер 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
в файл и используя его в качестве источника.