2015-06-13 3 views
0

пытались подключить мое приложение докеры node.js к службе mongodb безрезультатно. Я создал приложение для ограничения моста ($ BRIDGE_APP) без войны или кода, связанного с службой mongodb. Он работает с хорошим статусом. Должен сказать, что тот же код работает правильно в моем локальном контейнере докеров. Я использую мангуст для подключения к mongo.The только разнице в коде является способом разрешения строки соединения Монго:bluemix docker container bind to mongodb ('MongoError', message: 'connect ENETUNREACH')

var DB_CONNECT_STRING = 'mongodb://app:[email protected]:27017/appname'; 
if(custom.areWeOnBluemix() && custom.doWeHaveServices()) 
    DB_CONNECT_STRING = custom.getMongoConnectString(); 
... 
console.log('going to connect to [email protected]: ' + 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 

I проверьте окр ВАР:

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

, а затем я запускаю мой контейнер и связать ф:

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 [email protected]: 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 службы без успеха.

Неужели кто-нибудь в конце концов попробовал этот тип установки, который может предоставить мне дополнительную информацию о том, чего здесь нет?

поблагодарить Вас заранее

ответ

2

Это был мой опыт, что сеть не является надежной в IBM контейнерах в течение примерно 5 секунд при запуске. Попробуйте добавить «sleep 10» в CMD или ENTRYPOINT. Или настройте его на повторную попытку за X секунд, прежде чем сдаться.

Как только сеть подходит, она была надежной для меня. Но первые несколько секунд жизни контейнеров имели проблемы с DNS, привязкой и исходящим трафиком.

Недавно я дал аналогичный ответ a similar question. Возможно, ваша проблема такая же, как и у других плакатов.

+0

Это было правильно, я заставил серверный код дождаться 2 минуты перед подключением к db, и после этого у меня есть соединение успешно. Испытайте более короткий сон, но, по крайней мере, это работает. Супер спасибо. –

Смежные вопросы