一直试图将我的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服务但没有成功。
有没有人最终尝试过这种类型的设置,可以为我提供一些额外的线索,告诉我们这里缺少什么?
提前感谢你
答案 0 :(得分:2)
根据我的经验,IBM Containers中的网络在启动时大约5秒钟不可靠。尝试在您的CMD或ENTRYPOINT中添加“sleep 10”。或者将其设置为在放弃之前重试X秒。
一旦网络出现,它对我来说是可靠的。但是,容器生命的前几秒在DNS,绑定和传出流量方面遇到了麻烦。
我最近对a similar question给出了类似的答案。也许你的问题和其他海报一样。