Meteor DDP вызов между контейнерами на одном хосте
Этот код сервера приложений Meteor пытается использовать метод другого работника Meteor. и приложение, и рабочий находятся в отдельных док-контейнерах на одном сервере EC2. Работник работает на порту 9000.
Когда приложение запускает метод appCallingWorker
Я ожидал увидеть, что рабочий контейнер выходит из системы "работник вызван из приложения", но все docker logs containerID
дает много строк, выглядящих так:stream error Network error: ws://localhost:9000/websocket: connect ECONNREFUSED 127.0.0.1:9000
Как я могу использовать методы работника из приложения? Спасибо
//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 на хосте докера показывает ip контейнера, прослушивающего 9000, я заменил localhost в коде на указанный ip, и теперь он работает. Но указанный ip может измениться, если перезагрузка хоста или перезапуск контейнера... другая проблема, для которой нужно найти решение.
1 ответ
У меня была такая же проблема при попытке установить связь между докерными контейнерами. вам нужно будет использовать внешний адрес ip:port сервера, на котором находятся ваши контейнеры.