@docker_ru

Страница 1163 из 1375
Aibek
05.04.2019
15:40:29
А вот если внутри контейнера с монго пишу “ping mongo” не работает (( Хотя думаю это не имеет отношения ко всему этому

Oleg
05.04.2019
16:00:10
А вот если внутри контейнера с монго пишу “ping mongo” не работает (( Хотя думаю это не имеет отношения ко всему этому
есть еще такой вариант, что монго тупо не успевает стартовать к моменту, когда могнус к ней начинает коннектится. то, что в вашем композе прописано что app зависит от mongo — не гарантирует того, что app будет запускать после того как стартует сама монга. app будет стартовать тогда, когда стартует контейнер с монгой. и не будет ждать пока саммо приложение монги полностью запустится, почистит зубы и начнет принимать соединения

вариантов решения два

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
ну логиченее встеки падать и перезапускаться чем тянуть в бизнес-код всякий инфраструктурный тлен. сколько раз падать-перезапускаться, с каким интервалом и как вообще на это реагировать — в идеальном мире это тоже должно быть за пределами бизнес-кода по-максимуму =)

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 мин потому что это такой макаронный монстр, то можно смело заниматься реконнектами до боли в мозгу — там уже хуже не станет =)

Oleg
05.04.2019
16:17:48
Но ещё вопрос, что на время рестарта контейнера будут потеряны запросы от клиента
зависит. если например, это телеграм бот, то необработанные запросы там висят порядка часов =)

Aibek
05.04.2019
16:21:16
Господа, рад что подтолкнул вас на столь бурное обсуждение, но не соизволите посоветовать, какой вариант лучше применить? 1. рестарт через композ до победного конца 2. рестарт app пока не будет соединения

?

Aibek
05.04.2019
16:22:35
Спасибо

@ofstudio и Вам большое спасибо!

Пойду мучаться со своими контейнерами, пока не сделаю все по-человечески

Oleg
05.04.2019
16:31:07
Господа, рад что подтолкнул вас на столь бурное обсуждение, но не соизволите посоветовать, какой вариант лучше применить? 1. рестарт через композ до победного конца 2. рестарт app пока не будет соединения
Зависит. Я давно с монгусом не работал, не помню насколько адекватно там реконнект реализован. В любом случае, политику перезапуска приложения для прода лучше определить явно. Мало ли ещё по каким причинам приложение может крашнуться. Тоже касается монги, нжинкса и всего остального что там запускается.

Google
George
05.04.2019
16:43:59
+?

Peter
05.04.2019
19:52:03
привет ? вопрос наипростейший: у меня отдельным контейнером запущена монго. у меня есть несколько ноджс и не только приложений, которые с ней работают. как мне сделать, чтобы не устанавливать в каждый контенер свою монго, а обращаться к отдельному контейнеру? ведь как я понимаю, тот же монгус не словит localhost:27017, так как внутри контейнера его нет. в гугле одни docker-compose варианты, где и то и то вместе ставится

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
еще одна открытая в мир монга не нужна

%)

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
Порт 27017 не выставляй наружу!
я через bindIp закрываю обычно

Остальные контейнеры, которым нужна монга также добавь в сеть db
а как быть с проектами, которые не в контейнерах?

кроме создания для них контейнеров)

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?.

Evgeniy
05.04.2019
22:42:03
Тут я был. Не помогло(

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
Гуглить дальше
пишет просто что сайт недоступен, то я думаю это nginx

Google
Vladij
06.04.2019
10:53:12
единственную настройку nginx я нашел только в докере

)

Страница 1163 из 1375