Boot-clj соединение отказано
При попытке запустить Boot внутри Docker, используя образ adzerk/boot-clj, я получаю сообщения об отказе в соединении.
В частности, при запуске контейнера запускается загрузка, а затем выводится трассировка стека. Трассировка (которую нелегко копировать и вставлять между компьютерами без подключения) по существу связана с загрузкой - https://github.com/boot-clj/boot/releases/download/2.7.2/boot.jar - и получение ошибок "Отказ в соединении".
Я задаю и отвечаю на этот вопрос в надежде, что это может помочь кому-то еще.
1 ответ
Когда начать?
Моя основная проблема была с установкой Docker + Clojure + Boot, особенно при запуске "загрузки" изнутри контейнера. Делая это выбросил след стека. Здесь начинается мое путешествие.
Я использую образ adzerk/boot-clj. Я использовал его локально (OSX) без проблем, проблема, с которой я столкнулся, заключалась в использовании виртуальной машины (CentOS 7), размещенной в корпоративном центре обработки данных.
docker run -ti adzerk/boot-clj
После этого запускается контейнер, точка входа - Boot, и он начинает сбрасывать некоторые jar-файлы, в частности boot.jar из Github. Получившаяся трассировка стека детализирует несколько проблем, но суть была
“java.net.ConnectException: Connection refused” (connecting to Clojars.org:443)
Хммм...
Поэтому вместо запуска Boot прямо в контейнере я указал точку входа в контейнер как " —-entrypoint bash
"Так что я могу немного подтолкнуть.
Итак, wget - соединение отказано.
Как насчет без Docker в пути. То же самое. В соединении отказано.
Немного поссорившись с сетевой командой, я обнаружил, что переменная env "https_proxy" должна быть установлена в CentOS для маршрутизации трафика в Интернет. Очень специфическая проблема для меня в ситуации.
Тем не мение….
Теперь с wget все в порядке, как на хосте, так и внутри контейнера adzerk/boot-clj. Бута однако не было.
Стремясь еще больше упростить ситуацию, я полностью вывел Docker из уравнения и использовал boot локально.
Установил java-1.8.0-openjdk.x86_64, установил Boot. Та же проблема.
Так что немного покопался и нашел вот это - https://github.com/boot-clj/boot-bin/issues/2
Это было начало. В нем упоминается установка BOOT_JVM_OPTIONS, в частности https.proxyHost и https.proxyPort.
Это все еще не работало... Arrrg.
Хорошо, давайте выведем Boot из уравнения.
Я написал тестовый набор на Java, очень простой, который подключается к https: //clojars.org и пытается прочитать страницу индекса. Скопировано из https: //docs.oracle.com/javase/tutorial/networking/urls/readingWriting.html и настройки JVM_OPTS.
Это все еще не удается. "В соединении отказано"
.... Странная борода.
Я наконец наткнулся на это SO - https://stackru.com/questions/43695299/java-httpurlconnection-works-on-windows-and-fails-on-linux - конкретно ответ от Стивена С.
"Java не обязательно соответствует настройкам прокси-сервера вашей системы по умолчанию. Поскольку вы можете "свернуть" URL-адрес на компьютере с Linux, наиболее вероятным объяснением является то, что Java не использует настроенный вами прокси. Следующие ссылки объясняют различные способы настройки прокси для Java: "
Итак, взяв первую ссылку - https://stackru.com/questions/120797/how-do-i-set-the-proxy-to-be-used-by-the-jvm - и ответ от Леонеля
Я выпустил " java -Dhttps.proxyHost=xxx -Dhttps.proxyPort=80 HelloWorld
"
Я получаю ошибку, но другую. Это прогресс. "Невозможно проложить туннель через прокси"
Быстрый Google этого привел меня сюда: http://www.oracle.com/technetwork/java/javase/8u111-relnotes-3124969.html - "Отключить базовую аутентификацию для туннелирования HTTPS"
Итак, обновлено до " java -Dhttps.proxyHost=xxx -Dhttps.proxyPort=80 -Djdk.http.auth.tunneling.disabledSchemes=“” HelloWorld
Прибыль.
Информация:
java -v
openjdk version 1.8.0_144
Openjdk Runtime Environment (build 1.8.0_144-b01)
OpenJDK 64-Bit Server VM (build 25.144-b01, mixed mode)
Извините за всю мою ненормативную лексику.