Я устанавливаю внутренний способный прокси, который главным образом используется моими контейнерами Докера для нашей среды разработки.
И таким образом в моем 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
, получил тот же результат и обновил вопрос.
Можно протестировать, если соединение TCP может быть сделано к данному хосту и порту с помощью удара:
bash -c 'read -t0 < /dev/tcp/<proxy-ip>/<proxy-port>'
Это не проверяет, является ли сервис на другой конец прокси, но просто если существует что-то слушающее на другом конце.
Другая опция состояла бы в том, чтобы работать apt-get
для единого репозитория, например, путем записи deb http://archive.ubuntu.com/ubuntu $(lsb_release -sc) restricted
в файл и использование его как источник.