Aibek
05.04.2019
15:40:29
А вот если внутри контейнера с монго пишу “ping mongo” не работает (( Хотя думаю это не имеет отношения ко всему этому
Oleg
05.04.2019
16:00:10
вариантов решения два
George
05.04.2019
16:00:32
Google
George
05.04.2019
16:00:44
Использовать докер-компоуз 2.4
Сделать режим стендбай у приклада
Oleg
05.04.2019
16:02:01
1. простой. поставить в композе для app политику restart: always или unless-stopped
app стартует, обломается с подключением, завершится, перестартует снова и тп до тех пор пока монга не начнет коннекты принимать
2. настроить в mongoose.connect повторные подключения. там вторым параметром можно передать объект options, где среди прочего есть что-то типа reconnectTries и reconnectInterval (кажется так). в документаци к монгусу это есть
в обоих вариантах приложению надо дождаться пока монго физически стартанет и будет готова коннекты принимать
George
05.04.2019
16:04:27
Потому что монга может уйти посередине выполнения приклада
Этот кейс тоже нужно рассмотреть.
Либо гонять цикл по try/except, либо падать
Oleg
05.04.2019
16:05:06
Это говнище
это в любом случае придется сделать скорее всего
вне зависимости от монги
George
05.04.2019
16:05:27
Oleg
05.04.2019
16:07:47
ну логиченее встеки падать и перезапускаться чем тянуть в бизнес-код всякий инфраструктурный тлен.
сколько раз падать-перезапускаться, с каким интервалом и как вообще на это реагировать — в идеальном мире это тоже должно быть за пределами бизнес-кода по-максимуму =)
George
05.04.2019
16:08:49
Google
George
05.04.2019
16:08:49
Представь себе, что у тебя контейнер стартует 10 минут
И в случае отвала монги на 10 секунд - ты его перезапускаешь. Ну, ведь, дно получается
Проще ретраиться, пока монга оживет
Aibek
05.04.2019
16:10:51
2. настроить в mongoose.connect повторные подключения. там вторым параметром можно передать объект options, где среди прочего есть что-то типа reconnectTries и reconnectInterval (кажется так). в документаци к монгусу это есть
Спасибо. Этот вариант помог.
Вот мой код
const mongoose = require('mongoose');
const DBuri = 'mongodb:mongo/course';
const connectionConf = {
poolSize: 5,
keepAlive: 1,
autoIndex: true,
useCreateIndex: true,
useNewUrlParser: true,
};
const dbUri = process.env.mongo_uri || DBuri;
const db = mongoose.connection;
db.on('error', error => {
// if (config.get('mongoose.log')) {
// console.log(`${chalk.red('Mongoose failed to connect to')} ${chalk.red(dbUri)}`);
// console.log(`${chalk.red('Error')} ${chalk.red(error.name)}`);
// }
// reconnect if there was connection error
if (error.name === 'MongoNetworkError') {
setTimeout(() => mongoose.connect(dbUri, connectionConf), 3000);
}
});
db.once('open', ()=>{
console.log('we\'re connected!');
});
George
05.04.2019
16:12:07
Я описал кейс
Oleg
05.04.2019
16:15:38
Представь себе, что у тебя контейнер стартует 10 минут
сильно зависит от причин, по которым сервис стартует настолько долго.
если это обучловлено бизнес-логикой (напр, для работы нужен набор внешних данных, которые меньше чем за 10 минут не получить) — то действительно, надо думать: как жить.
конкретно в случае с монгусом — хз как, тк это однопоточный джаваскрипт и провалившись глубоко в эксепшен по дисконнекту, вернуться в какое-то определенное состояние обратно будет проблематично.
если стартует 10 мин потому что это такой макаронный монстр, то можно смело заниматься реконнектами до боли в мозгу — там уже хуже не станет =)
George
05.04.2019
16:16:11
Но ещё вопрос, что на время рестарта контейнера будут потеряны запросы от клиента
Нужно сразу на ситуацию смотреть в целом
Oleg
05.04.2019
16:17:48
Aibek
05.04.2019
16:21:16
Господа, рад что подтолкнул вас на столь бурное обсуждение, но не соизволите посоветовать, какой вариант лучше применить?
1. рестарт через композ до победного конца
2. рестарт app пока не будет соединения
?
George
05.04.2019
16:21:57
И вообще нефиг использовать докер компоуз для прода
Мне больше нравится 2
Aibek
05.04.2019
16:22:35
Спасибо
@ofstudio и Вам большое спасибо!
Пойду мучаться со своими контейнерами, пока не сделаю все по-человечески
Oleg
05.04.2019
16:31:07
Google
George
05.04.2019
16:43:59
+?
Peter
05.04.2019
19:52:03
привет ?
вопрос наипростейший:
у меня отдельным контейнером запущена монго.
у меня есть несколько ноджс и не только приложений, которые с ней работают.
как мне сделать, чтобы не устанавливать в каждый контенер свою монго, а обращаться к отдельному контейнеру?
ведь как я понимаю, тот же монгус не словит localhost:27017, так как внутри контейнера его нет.
в гугле одни docker-compose варианты, где и то и то вместе ставится
George
05.04.2019
19:52:40
Что значит устанавливать монгу в каждый контейнер ?
Peter
05.04.2019
19:52:54
ээ
George
05.04.2019
19:53:15
Ну, не localhost:27017, а укажите внешний айпи сервера:27017
Peter
05.04.2019
19:55:14
это вроде бы не очень, не?
(по ноде-докеру-монго я немного мимокрокодил, могу чутка потупить)
George
05.04.2019
19:56:04
Почему не очень ? Нормально
Alex
05.04.2019
19:56:27
Создай сеть и добавь в нее остальные контейнеры
Taz
05.04.2019
19:56:34
еще одна открытая в мир монга не нужна
%)
George
05.04.2019
19:57:31
Peter
05.04.2019
19:59:01
:D
Alex
05.04.2019
19:59:25
И? Они на отдельном сервере ?
Или все в рамках одной машины?
Peter
05.04.2019
19:59:47
да, в рамках одной машины
Google
Oleg
05.04.2019
20:35:33
Если в рамках одной машины бежит много приложенек и многим нужна монга, то создай сеть: docker network create db
Добавь в эту сеть контейнер с монгой при запуске
Назови контейнер mongo
Порт 27017 не выставляй наружу!
Остальные контейнеры, которым нужна монга также добавь в сеть db
И обращайся из них к монге как mongodb://mongo/...
Peter
05.04.2019
21:16:41
кроме создания для них контейнеров)
Evgeniy
05.04.2019
22:36:50
Всем привет! Ребят, подскажите пожалуйста. При установки Docker ошибка в конце. Как быть?((
dpkg: ошибка при обработке пакета docker-ce (--configure):
installed docker-ce package post-installation script subprocess returned error exit status 1 А при выполнении команды: sudo docker run ubuntu
[sudo] пароль для zheev:
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.
Taz
05.04.2019
22:41:29
Evgeniy
05.04.2019
22:42:03
Тут я был. Не помогло(
Andrey
05.04.2019
22:53:53
Evgeniy
05.04.2019
22:54:26
Vladij
06.04.2019
10:48:25
Приветствую, подскажите, восстановил виртуальный образ на убунте и перестал работать сайт. Нашел ошибку Could not generate persistent MAC address for
Пошарил в гугле, то вроде как проблема в докере. Теперь немогу разобраться как запустить его по отдельным контейнерам
подскажите пожалуйста
George
06.04.2019
10:50:55
Гуглить дальше
Впервые слышу. К тому же, вряд ли проблема в докере как таковом
Vladij
06.04.2019
10:52:54
Google
Vladij
06.04.2019
10:53:12
единственную настройку nginx я нашел только в докере
)
Andrey
06.04.2019
13:28:20