docker - 如何通过 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
解决方案
最后,我找到了这个问题的原因。超时的原因是它在主机和容器之间使用了相同的 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 的行为。
推荐阅读
- python - 从 beautifulsoup 结果中删除HTML 标记
- css - Bootstrap 3输入组插件丢失标记
- r - R:如何以递归方式将文本文件读入列表列表?
- php - 在 symfony4 中为 redis 设置无键前缀
- firebase - 如何使用 firebase cli 将文件推送到 firebase 存储
- swift - 部分中选定行的索引
- azure-ad-b2c - Azure AD B2C - 身份框架体验时间表
- python - 在 Python 中使用方法链进行延迟计算
- c# - 如何从方法返回对对象的 const 引用?
- libc - 为什么 libc 有两个版本号(在 Ubuntu 上)?