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()
末尾運行的檢查將返回除端口映射之外的所有內容。如果我沒有正確地等待過程開始,檢查將返回一個空值。
對這裏可能會發生什麼或者我應該做什麼改變的想法?