Проверка, существует ли способный прокси

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

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

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

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

Так как я также хочу создать то изображение Докера на хосте облачного сервиса, который не сможет получить доступ: ни будет иметь смысл делать так, я думал, что помещу проверку прежде, чем настроить клиент способный прокси:

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 (Докер чтения ubuntu изображение), что является лучшим (самый быстрый и самый устойчивый) способ проверить, достижим ли способный прокси?


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

0
задан 10 October 2018 в 00:49

1 ответ

Можно протестировать, если соединение TCP может быть сделано к данному хосту и порту с помощью удара:

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

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

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

1
ответ дан 27 October 2019 в 08:40

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

Похожие вопросы: