如何通过SCTP在Docker容器和Linux主机之间进行通信



我尝试在docker容器上侦听SCTP,并从Linux主机连接到那里。但连接似乎超时了
是否有任何方法可以通过SCTP在主机和容器之间进行通信?

仅供参考:看起来容器到容器的SCTP通信运行良好。

详细信息如下:

test-container的Dockerfile

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.

docker版本

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

最后,我找到了这个问题的原因。超时的原因是它在主机和容器之间使用了相同的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的行为。

最新更新