docker容器之间的套接字连接失败

docker容器之间的套接字连接失败,docker,docker-compose,microservices,Docker,Docker Compose,Microservices,我通过docker compose文件部署了多个容器,如下所示 version: '3' services: module2: restart: always build: dockerfile: Dockerfile context: ./Module-2 ports: - '16667:16667' module3: build: dockerfile: Dockerfile context:

我通过docker compose文件部署了多个容器,如下所示

version: '3'
services:
  module2:
    restart: always
    build:
      dockerfile: Dockerfile
      context: ./Module-2
    ports:
      - '16667:16667'
  module3:
    build:
      dockerfile: Dockerfile
      context: ./Module-3
    ports:
      - '16669:16669'
模块2接收来自外部源的套接字请求,并按预期工作。当模块2尝试与模块3连接时,故障开始

模块2代码(JAVA)

模块3代码(GO)

当我尝试发送请求时,模块2接收到连接拒绝错误

我觉得我对docker networks没有最好的理解,我认为这就是问题所在。
提前感谢您的帮助

在您的情况下,当您启动
docker compose
时,
module2
module3
两个容器将位于同一docker网络中,它们可以使用各自的DNS名称相互连接,即
module2
module3

因此,您应该将
模块2
代码更新为如下所示

private int socket_port = 16669;
    private String server = "module3";

    public TextOutputSocket() {

    }
...

请注意,为了使这两个模块能够相互通信,您不需要像
-“16667:16667”或
-“16669:16669”
这样进行端口映射。

首先,您需要了解docker容器是如何工作的。每个应用程序都部署在两个单独的容器中。因此,当尝试连接到其他容器时,需要提供该特定容器的ip或主机名

在这里,您尝试连接到localhost的1669,而应该尝试连接到另一个容器。这可以通过设置module3容器的容器名称来实现,docker dns将为您解析ip地址

简单地将127.0.0.1替换为模块3

ln, err := net.Listen("tcp", ":16669")
    if err != nil {
        fmt.Println(err)
        // handle error
    }
private int socket_port = 16669;
    private String server = "module3";

    public TextOutputSocket() {

    }
...