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)

Извините за всю мою ненормативную лексику.

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