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

时间:2015-07-10 10:39:19

标签: sockets docker zeromq

我在myBean.doOnCancel端口host上运行了一个发布商。

装入容器会很痛苦。

我有一个在容器内运行的订阅者。

问题在于,如果我首先在N上运行发布商,那么我就无法导出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 错误。

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

除了在容器中运行发布者之外,我能做些什么吗?

2 个答案:

答案 0 :(得分:1)

确保您的docker恶魔正在使用 --icc=true (容器/网络之间的通信)运行,并且docker0网络适配器已成功添加到您的主机 iptables < / strong> config(通常由docker参数 --iptables=true 完成)。

然后使用 -p N (而非N:N)运行您的容器。这意味着该端口在主机端口上 公开 映射

然后查找容器ip地址:

$ docker inspect publisher

现在请与 localhost :5570联系您的订阅者,但 ip-adress :5570

答案 1 :(得分:0)

当您执行N:N时,端口与主机绑定良好。您可能已经在使用此端口运行容器。尝试public partial class Form1 : Form { public Form1() { InitializeComponent(); this.Name = "form"; Form f = this; doSomethingWithForm(f); } private void doSomethingWithForm(Form f) { Console.WriteLine(f.Name); } } 查看是否有一个容器正在运行该端口。如果一个,杀了它。