我在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将端口从容器暴露到主机时以某种方式绑定到它们。所以没有其他人可以绑定到主机中的那个端口。
除了在容器中运行发布者之外,我能做些什么吗?
答案 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);
}
}
查看是否有一个容器正在运行该端口。如果一个,杀了它。