我试图在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
$ 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
$ 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
答案 0 :(得分:0)
最后,我找到了此问题的原因。 超时的原因是它在主机和容器之间使用了相同的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的行为。