2016-07-08 47 views
0

我使用https://github.com/apocas/dockerode從node.js的應用程序管理Docker容器和寫了下面的功能:第一次使用inspect的空端口綁定。第二次好。爲什麼?

run: function(opts) { 
    var self = this; 
    return self.createContainer(opts).catch(function(e) { 
     return self.pull(opts.Image).then(function(stream) { 
      return self.followProgress(stream); 
     }).then(function() { 
      return self.createContainer(opts); 
     }); 
    }).then(function(o) { 
     Bluebird.promisify(o.start, {context: o})(); 
     return o; 
    }).then(function(o) {; 
     var inspect = Bluebird.promisify(
      o.inspect, {context: o} 
     ); 
     return inspect(); 
    }); 
}, 

我稱之爲是這樣的:

bitcoind: function(opts) { 
    return this.run({ 
     name: 'bitcoind', 
     Image: 'seegno/bitcoind:latest', 
     Env: ['BITCOIN_DATA=/data'], 
     Binds: [process.cwd() + '/bitcoind:/data'], 
     HostConfig: { 
      PortBindings: { 
       '8332/tcp': [{ HostPort: '8332' }] 
      } 
     }, 
     Cmd: [ 
      '-server', 
      '-rpcuser=' + opts.user, 
      '-rpcpassword=' + opts.pass, 
      '-printtoconsole' 
     ] 
    }); 
}, 

,一切完美的作品,幾乎。如果我啓動我的bitcoind服務器,如下所示:

docker.bitcoind(config.bitcoind).then(function(info) { 
    var p = info.NetworkSettings.Ports; 
    console.log(p); 
}); 

控制檯顯示「null」。港口沒有設置。命令行向我顯示適當的值。運行

$ docker inspect bitcoind 

我看到:

 "Ports": { 
      "18332/tcp": null, 
      "18333/tcp": null, 
      "18444/tcp": null, 
      "8332/tcp": [ 
       { 
        "HostIp": "0.0.0.0", 
        "HostPort": "8332" 
       } 
      ], 
      "8333/tcp": null 
     }, 

這是我所期待的。所以出於好奇我然後跑了:

docker.inspect('693f32482b46').then(function(info) { 
    console.log(info); 
}); 

並且包含端口信息!所以我很困惑,爲什麼在run()末尾運行的檢查將返回除端口映射之外的所有內容。如果我沒有正確地等待過程開始,檢查將返回一個空值。

對這裏可能會發生什麼或者我應該做什麼改變的想法?

回答

0

OK,答案是我必須等待start方法來完成

相關問題