【问题标题】:Socket connections between docker containers failsdocker 容器之间的套接字连接失败
【发布时间】:2020-06-29 03:28:00
【问题描述】:

我通过如下所示的 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)

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

    public TextOutputSocket() {

    }

    public TextOutputSocket(String host, int socket_port) {
        this.server = host;
        this.socket_port = socket_port;
    }

    public void sendText(String textToSend) {
        OutputStream os = null;
        Socket sock = null;
        try {
            System.out.println("Connecting to " + server + ":" + socket_port);
            sock = new Socket(server, socket_port);

            os = sock.getOutputStream();

模块 3 代码 (GO)

ln, err := net.Listen("tcp", ":16669")
    if err != nil {
        fmt.Println(err)
        // handle error
    }

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

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

【问题讨论】:

    标签: docker docker-compose microservices


    【解决方案1】:

    在您的情况下,当您启动 docker-composemodule2module3 时,2 个容器将位于同一个 docker 网络中,并且它们可以使用它们的 DNS 名称(即 module2module3)相互连接分别。

    因此,您应该将您的module2 代码更新为这样

    private int socket_port = 16669;
        private String server = "module3";
    
        public TextOutputSocket() {
    
        }
    ...
    

    请注意,您无需像- '16667:16667'- '16669:16669' 那样进行端口映射,以便这两个模块相互通信。

    【讨论】:

      【解决方案2】:

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

      这里你尝试连接到 localhost 的 1669,而不是你应该做的是尝试连接到另一个容器。这可以通过设置module3容器的容器名称来完成,docker dns会为你解析ip地址。

      简单地将 127.0.0.1 替换为 module3

      【讨论】:

        猜你喜欢
        • 2018-11-22
        • 2021-03-23
        • 1970-01-01
        • 1970-01-01
        • 2015-07-01
        • 2018-12-22
        • 1970-01-01
        • 2021-03-10
        相关资源
        最近更新 更多