1

有没有人能够[java.net InetSocketAddress ServerSocket]从 docker 内部绑定到一个?我有一个在 docker 容器中运行的简单NRepl进程。但我无法连接到那个 NRepl 进程。

我的docker-compose.yml看起来像这样。

version: '3'
services:
  foo:
    ports:
      - ${NREPL_PORT:-7001}:7001

在 dockerized 应用程序中,正在发生类似下面的事情以绑定到主机/端口。

InetSocketAddress ia = new InetSocketAddress("0.0.0.0" 7001);

ServerSocket s = new ServerSocket();
s.setReuseAddress(true);
s.bind(ia);

但是在尝试从 docker 外部进行连接时,我总是遇到错误。

λ lein repl :connect localhost:7001
Connecting to nREPL at localhost:7001
SocketException The transport's socket appears to have lost its connection to the nREPL server
        nrepl.transport/bencode/fn--9182/fn--9183 (transport.clj:108)
        nrepl.transport/bencode/fn--9182 (transport.clj:108)
        nrepl.transport/fn-transport/fn--9150 (transport.clj:55)
        clojure.core/binding-conveyor-fn/fn--5739 (core.clj:2030)
        java.util.concurrent.FutureTask.run (FutureTask.java:266)
        java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
        java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:617)
        java.lang.Thread.run (Thread.java:745)

我尝试监听这些地址(从 docker 主机无法监听 localhost),但每次都会遇到相同的错误。

  "0.0.0.0"
  "::"

在运行时,我检查并打开了预期的端口。

λ docker ps
CONTAINER ID    IMAGE      COMMAND       CREATED         STATUS         PORTS                     NAMES
4d39d81fba69    api_api    "lein run"    5 minutes ago   Up 5 minutes   0.0.0.0:7001->7001/tcp    api_api_1

这些是类似的问题(ab),对我的情况没有太大帮助。

4

0 回答 0