bluemix docker container绑定到mongodb(' MongoError',message:' connect ENETUNREACH')

时间:2015-06-13 09:21:31

标签: node.js mongodb docker ibm-cloud

一直试图将我的docker node.js应用程序连接到mongodb服务无济于事。 我创建了一个自由桥接应用程序($ BRIDGE_APP),没有战争或代码绑定到mongodb服务。它运行状态良好。 不得不说在我的本地docker容器中正确运行相同的代码。我使用mongoose连接到mongo。代码的唯一区别是解析mongo连接字符串的方式:

var DB_CONNECT_STRING = 'mongodb://app:password@127.0.0.1:27017/appname';
if(custom.areWeOnBluemix() && custom.doWeHaveServices())
    DB_CONNECT_STRING = custom.getMongoConnectString();
...
console.log('going to connect to mongo@: ' + DB_CONNECT_STRING);
    var db = mongoose.createConnection(DB_CONNECT_STRING);
    db.on('error', console.error.bind(console, 'connection error:'));
    db.once('open', function (callback) {
      console.log('... db open !!!');
    });

我将图像推送到bluemix,没有任何问题:

ice --local push $REGISTRY/$ORG/$CONTAINER_NAME

然后检查env vars:

cf env $BRIDGE_APP
System-Provided:
{
  "VCAP_SERVICES": {
    "mongodb-2.4": [
      {
        "credentials": {.....

然后我运行我的容器并绑定一个ip:

ice run --bind $BRIDGE_APP --name $CONTAINER_NAME -p $PORT $REGISTRY/$ORG/$CONTAINER_NAME:latest
sleep 12
ice ip bind $IP $CONTAINER_NAME

......这几乎完全出自本书,但出于某些原因,当我检查日志时,我总是得到:

ice logs $CONTAINER_NAME
...
going to connect to mongo@: mongodb://c61deb58-45ea-41....
Example app listening at http://0.0.0.0:8080
connection error: { [MongoError: connect ENETUNREACH] name: 'MongoError', message: 'connect ENETUNREACH' }

我也试过mongolab服务但没有成功。

有没有人最终尝试过这种类型的设置,可以为我提供一些额外的线索,告诉我们这里缺少什么?

提前感谢你

1 个答案:

答案 0 :(得分:2)

根据我的经验,IBM Containers中的网络在启动时大约5秒钟不可靠。尝试在您的CMD或ENTRYPOINT中添加“sleep 10”。或者将其设置为在放弃之前重试X秒。

一旦网络出现,它对我来说是可靠的。但是,容器生命的前几秒在DNS,绑定和传出流量方面遇到了麻烦。

我最近对a similar question给出了类似的答案。也许你的问题和其他海报一样。