如何从主机向 docker 容器中的子套接字 运行 发送消息?

How to send messages to a sub socket running in docker container from host?

我在 N 端口 host 上有一个发布者 运行ning。

装入容器会很痛苦。

我有一个订户 运行在一个容器里。

问题是,如果我首先 运行 host 上的发布者,那么我无法在 docker run -d -p N:N publisher 中导出端口(其中 N 是端口号)

Error response from daemon:    Cannot start container 41202025441bf02ad5c8cf2a85fb1f1bd04c2211e648f5ec446442f9af4a6274:
Error starting userland proxy: listen tcp 0.0.0.0:5570:
                               bind: address already in use

如果我首先启动容器,那么发布者中会出现 Address already in use 错误。

我认为的问题是,当 docker 从容器向主机公开端口时,会以某种方式绑定到它们。所以没有其他人可以绑定到主机中的那个端口。

我可以在容器中做些其他事情 运行ning 发布者吗?

当您执行 N:N 时,端口与主机绑定良好。您可能有一个 运行 容器已经在使用这个端口。尝试 docker ps -a 看看是否有一个容器 运行 该端口。如果有,杀了它。

确保你的docker恶魔是运行--icc=true(containers/network之间的交流)和docker0 网络适配器已成功添加到您的主机 iptables 配置(通常由 docker 参数 --iptables=true).

然后 运行 您的容器 -p N(不是 N:N)。这意味着端口是 exposednot mapped在主机端口上。

然后查找容器 ip 地址:

$ docker inspect publisher

现在联系您的订阅者不是通过 localhost:5570,而是通过 ip-adress:5570.