docker 容器内的 Log4j2 套接字附加程序抛出连接被拒绝
Log4j2 socket appender inside a docker container throw connection refused
我在 docker 容器上有一个 springboot 应用程序 运行。在我的应用程序中有一个带有套接字附加程序的 log4j.xml 文件。
<Socket name="Socket" host="172.17.0.1" port="5100">
<JsonLayout compact="true" eventEol="true" />
</Socket>
在我的主机服务器(Ubuntu 服务器)中,它通过 logstash 列出端口 5100。主机中“netstat -tulpn”命令的输出如下。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8280 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5100 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5001 0.0.0.0:* LISTEN -
但是当springboot服务器启动时出现连接被拒绝的错误。
2021-07-30 05:20:47,646 main ERROR TcpSocketManager (TCP:172.17.0.1:5100) caught exception and will continue: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
我也尝试使用“host.docker.internal”,但它不起作用。谁能告诉我这有什么问题吗?
正如您从 netstat
输出中看到的那样,Logstash 仅在 127.0.0.1:5100
上侦听。这意味着无法从 Docker 中访问它。你必须让它在 172.17.0.1:5100
或 0.0.0.0:5100
.
上监听
我在 docker 容器上有一个 springboot 应用程序 运行。在我的应用程序中有一个带有套接字附加程序的 log4j.xml 文件。
<Socket name="Socket" host="172.17.0.1" port="5100">
<JsonLayout compact="true" eventEol="true" />
</Socket>
在我的主机服务器(Ubuntu 服务器)中,它通过 logstash 列出端口 5100。主机中“netstat -tulpn”命令的输出如下。
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:8280 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5100 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:5001 0.0.0.0:* LISTEN -
但是当springboot服务器启动时出现连接被拒绝的错误。
2021-07-30 05:20:47,646 main ERROR TcpSocketManager (TCP:172.17.0.1:5100) caught exception and will continue: java.net.ConnectException: Connection refused (Connection refused)
at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
我也尝试使用“host.docker.internal”,但它不起作用。谁能告诉我这有什么问题吗?
正如您从 netstat
输出中看到的那样,Logstash 仅在 127.0.0.1:5100
上侦听。这意味着无法从 Docker 中访问它。你必须让它在 172.17.0.1:5100
或 0.0.0.0:5100
.