2016-12-15 26 views
0

这个流星应用服务器代码尝试使用另一个流星工作者的方法。应用程序和工作人员都位于同一台服务器EC2上的独立泊坞窗容器中。工人在端口9000
当应用程序触发的方法appCallingWorker运行,我期望看到工人容器注销字符串“工人从应用程序称为”但是所有docker logs containerID给的多线看起来像这样:
stream error Network error: ws://localhost:9000/websocket: connect ECONNREFUSED 127.0.0.1:9000流星在同一主机上的容器之间的DDP呼叫

如何从应用程序使用工作人员的方法? THX

//App/server/main.js 
let workerConn = DDP.connect('http://localhost:9000'); 
Meteor.methods({ 
'appCallingWorker':() => { 
    workerConn.call('workerMethod'); 
    } 
}); 

//Worker/server/main.js 
Meteor.methods({ 
    'workerMethod': function() { 
    console.log('worker called from App'); 
    } 
}) 

编辑
的EC2是一个容器实例在AWS ECS。和containerDefinitions.portMapings.containerPort和HOSTPORT都被设置为9000
泊坞窗主机上编辑2
的iptables -L -n表示容器监听9000的IP,我的代码替换本地主机与所述IP,现在它工作。但是,如果主机重新启动或容器重新启动,则说ip可以改变...另一个问题找到解决方案。

+0

连接被拒绝,这意味着没有任何监听localhost:9000。如果你的应用程序在不同的码头容器中,他们是否有自己的IP地址,并且你应该试图连接到它? – Mikkel

+0

@Mikkel我在对我的文章进行编辑时给你回复了很好的观察。 thx为您的输入。如果我的流程不完整,请提供更多信息。 –

+0

你所做的只是用127.0.0.1替换localhost - 这不是有效的网络地址, – Mikkel

回答

0

我有这个相同的问题试图在码头集装箱之间进行通信。你将不得不使用你的容器所在服务器的外部ip:port地址。

+0

AWS自动缩放或手动重新创建ECS集群中的EC2将使IP无效,那么什么? –

+0

你可以使用域名吗? 'service.myapp.com:9000'什么的? – rkstar

+0

那些没有域名的后台工作人员呢?会使用域名让Container之间的本地流量通过互联网吗? –