我有一个简单的app(simple.js),用nodejs编写,
var amqp = require('amqplib/callback_api');
amqp.connect('amqp://localhost', function(err, conn) {
conn.createChannel(function(err, ch) {
var q = 'hello';
ch.assertQueue(q, {durable: false});
// Note: on Node 6 Buffer.from(msg) should be used
ch.sendToQueue(q, new Buffer('Hello World!'));
console.log(" [x] Sent 'Hello World!'");
});
setTimeout(function() { conn.close(); process.exit(0) }, 500);
});
我已将它停靠(简单应用)。然后我从码头中心拉出了rabbitmq码头。 当我尝试以下列方式链接这些时:
docker run -d --name rabbitmq-server rabbitmq:latest
docker build -t simple-app .
docker run -d -P --name myapp --link rabbitmq-server:rabbitmq-server simple-app
docker logs a8789193af523b
我得到以下提到的错误:
/usr/src/server/simple.js:3
conn.createChannel(function(err, ch) {
^
TypeError: Cannot read property 'createChannel' of undefined
at /usr/src/server/simple.js:3:7
at /usr/src/server/node_modules/amqplib/callback_api.js:16:10
at Socket.<anonymous> (/usr/src/server/node_modules/amqplib/lib/connect.js:167:18)
at Socket.g (events.js:292:16)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at emitErrorNT (net.js:1277:8)
at _combinedTickCallback (internal/process/next_tick.js:80:11)
at process._tickCallback (internal/process/next_tick.js:104:9)
我尝试了很多方法来解决: 1.使用-links使用-P选项暴露所有端口 2.使用-p选项--links映射特定端口 3.使用网桥作为驱动程序创建网络,并使用该n / w启动所有我的docker。
上述方法似乎都不起作用,我不断得到同样的错误。 我在AWS(EC2)上尝试这个..亚马逊linux。
另外,如果我尝试直接在linux上运行simple.js,它就会成功连接到我的rabbitmq服务器(它是dockerized)。
请帮帮我!!