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:51000.0.0.0:5100.

上监听