首页 > 解决方案 > 如何通过 SCTP 在 Docker 容器和 Linux 主机之间进行通信

问题描述

我尝试在 docker 容器上收听 SCTP 并从 Linux 主机连接到那里。但似乎连接超时。
有没有办法通过 SCTP 在主机和容器之间进行通信?

仅供参考:看起来容器到容器的 SCTP 通信工作正常。

详细信息如下:

Dockerfile 为test-container

FROM ubuntu:focal
RUN apt update -y && apt install -y ncat

码头运行

$ sudo docker run --rm --name sctp-server -p 9999:9999/sctp test-container:latest ncat --sctp -lv 9999

SCTP 请求(超时)

$ ncat --sctp 127.0.0.1 9999
Ncat: TIMEOUT.

码头工人版本

Client: Docker Engine - Community
 Version:           19.03.13
 API version:       1.40
 Go version:        go1.13.15
 Git commit:        4484c46d9d
 Built:             Wed Sep 16 17:02:52 2020
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.13
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       4484c46d9d
  Built:            Wed Sep 16 17:01:20 2020
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.3.7
  GitCommit:        8fba4e9a7d01810a393d5d25a3621dc101981175
 runc:
  Version:          1.0.0-rc10
  GitCommit:        dc9208a3303feef5b3839f4323d9beb36df0a9dd
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

仅供参考:容器到容器的 SCTP 通信(工作正常)

$ sudo docker network create -d bridge sctp
$ sudo docker run --rm --name sctp-server --net=sctp sctp-test:latest ncat --sctp -lv 9999
$ sudo docker run --rm --name sctp-client --net=sctp sctp-test:latest ncat --sctp 172.18.0.2 9999

标签: dockersctp

解决方案


最后,我找到了这个问题的原因。超时的原因是它在主机和容器之间使用了相同的 SCTP 端口。

当我启动一个具有不同端口的容器并在主机上sudo docker run --rm --name sctp-server -p 19999:9999/sctp test-container:latest ncat --sctp -lv 9999运行时,它运行良好。ncat --sctp 127.0.0.1 19999

我不自信,但我怀疑 iptables 的行为。


推荐阅读