Docker 启动clj连接被拒绝

Docker 启动clj连接被拒绝,docker,clojure,jvm,boot-clj,Docker,Clojure,Jvm,Boot Clj,当尝试在Docker内部使用adzerk/Boot clj映像运行Boot时,我收到连接拒绝错误 具体来说,当容器启动时,启动,然后输出堆栈跟踪。跟踪(不容易在没有连接的计算机之间复制和粘贴)本质上与下载和接收“拒绝连接”错误有关 我提出并回答这个问题,希望它能帮助其他人 从哪里开始 我的主要问题是Docker+Clojure+引导设置,特别是从容器内部运行“引导”时。这样做会产生堆栈跟踪。这就是我旅程的起点 我正在使用adzerk/bootclj映像。我在本地(OSX)使用它时没有遇到任何问题

当尝试在Docker内部使用adzerk/Boot clj映像运行Boot时,我收到连接拒绝错误

具体来说,当容器启动时,启动,然后输出堆栈跟踪。跟踪(不容易在没有连接的计算机之间复制和粘贴)本质上与下载和接收“拒绝连接”错误有关

我提出并回答这个问题,希望它能帮助其他人

从哪里开始

我的主要问题是Docker+Clojure+引导设置,特别是从容器内部运行“引导”时。这样做会产生堆栈跟踪。这就是我旅程的起点

我正在使用adzerk/bootclj映像。我在本地(OSX)使用它时没有遇到任何问题,我遇到的问题是使用托管在公司数据中心内的VM(CentOS 7)

docker run -ti adzerk/boot-clj
发出这个命令将启动容器,入口点是Boot,它开始从Github中取出一些jar,特别是Boot.jar。由此产生的堆栈跟踪详细说明了几个问题,但关键是

“java.net.ConnectException: Connection refused” (connecting to Clojars.org:443)

因此,我没有直接在容器中运行Boot,而是将容器入口点指定为“
--entrypoint bash
”,这样我就可以在容器中进行一些操作

因此,wget连接被拒绝

没有Docker挡道怎么样。同样的事情。连接被拒绝

在与网络团队进行了一些争论之后,我发现需要在CentOS上设置“https_proxy”env变量,以便将流量路由到internet。这对我来说是一个非常具体的问题

然而

wget现在在主机上和adzerk/bootclj容器中都很好。然而,Boot并不是

为了使事情更加简化,我将Docker从等式中完全去掉,并在本地使用boot

已安装java-1.8.0-openjdk.x86_64,已安装引导。同样的问题

所以仔细研究了一下,发现了这个-https://github.com/boot-clj/boot-bin/issues/2

这是一个开始。它提到设置BOOT_JVM_选项,特别是https.proxyHost和https.proxyPort

还是没用…啊

好吧,让我们把靴子从等式中去掉

我用Java编写了一个测试工具,非常简单,可以连接到https://clojars.org并尝试读取索引页面。从https://docs.oracle.com/javase/tutorial/networking/url/readingWriting.html复制,并设置JVM选项

它仍然失败。“连接被拒绝”

…。奇怪的胡子

我最终偶然发现了这个SO-https://stackoverflow.com/questions/43695299/java-httpurlconnection-works-on-windows-and-fails-on-linux-特别是Stephen C

Java不一定遵守系统的默认代理设置。由于您可以在Linux计算机上“卷曲”URL,最可能的解释是Java没有使用您配置的代理。以下链接解释了为Java配置代理的各种方法:

因此,请看第一个链接——https://stackoverflow.com/questions/120797/how-do-i-set-the-proxy-to-be-use-by-the-jvm——以及Leonel的答案

我发布了“
java-Dhttps.proxyHost=xxx-Dhttps.proxyPort=80 HelloWorld

我得到一个错误,但是一个不同的错误。这就是进步。“无法通过代理进行隧道”

快速的谷歌搜索让我想到了这一点: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)
很抱歉我的亵渎行为。

从哪里开始

我的主要问题是Docker+Clojure+引导设置,特别是从容器内部运行“引导”时。这样做会产生堆栈跟踪。这就是我的旅程开始的地方

我使用的是adzerk/boot clj映像。我在本地(OSX)使用过它,没有问题,我遇到的问题是使用托管在公司数据中心内的VM(CentOS 7)

docker run -ti adzerk/boot-clj
发出这个命令会启动容器,入口点是Boot,它开始从Github中取出一些jar,特别是Boot.jar

“java.net.ConnectException: Connection refused” (connecting to Clojars.org:443)

因此,我没有直接在容器中运行Boot,而是将容器入口点指定为“
--entrypoint bash
”,这样我就可以在容器中进行一些操作

因此,wget连接被拒绝

没有Docker怎么办?同样的事情,连接被拒绝了

在与网络团队进行了一些争论之后,我发现需要在CentOS上设置“https_proxy”env变量以将流量路由到internet。在这种情况下,这对我来说是一个非常具体的问题

然而

wget现在在主机上和adzerk/boot-clj容器中都很好,但是boot没有

为了使事情更加简化,我将Docker从等式中完全去掉,并在本地使用boot

安装了java-1.8.0-openjdk.x86_64,安装了Boot。同样的问题

所以仔细研究了一下,发现了这个-https://github.com/boot-clj/boot-bin/issues/2

这是一个开始,它提到了设置启动JVM选项,特别是https.proxyHost和https.proxyPort

还是没用…啊

好吧,让我们把靴子从等式中去掉

我用Java编写了一个测试工具,非常简单,它连接到https://clojars.org并尝试读取索引页面。从https://docs.oracle.com/javase/tutorial/networking/url/readingWriting.html复制,并设置JVM选项

它仍然失败。“连接被拒绝”

……奇怪的胡子

我终于偶然发现了这个所谓的https://stackoverflow.com/questions/43695