Mikhail
Может это не тот порт
Alexander
действительно, сходи курлом
S
Alexander
😅
Alexander
127.0.0.1:8080
Alexander
curl 127.0.0.1:8080
Alexander
а, поспешил
Игорь
А подскажите хорошию тулзу для мониторинга запущенных контейнеров
Aibek
Добрый день!
Помогите пожалуйста:
ЧТо я хочу сделать.
Используя docker-compose поднять веб-сервис ( Nginx + node.js + MongoDB).
Nginx работает.
MongoDB работает.
NodeJs ругается, но я не могу понять почему nodejs не может подключится к базе.
Помогите пожалуйста.
https://gist.github.com/45Code/d4223341ff61fc6a05c1b4480b03bbfc
Borik
Привет
Странного хочу. Есть докер, ктрый запускается на винде. Хочу в него передать в качестве внутренней переменной окружения результаты выполения команды перед его запуском.
Andor
сделай кастомный энтрипоинт, котоырй потом делает exec на родной энтрипоинт
Oleg
Aibek
Borik
не, я хочу что-то вроде линуксовго:
docker run -e "deep=`date`" --rm alpine env
но в винд
S
Ребят, плиз помогите
Aibek
не помогло ((
Viktor
Ребят, плиз помогите
Дайте уже нормальные логи.
telnet localhost 8080 что говорит?
curl -v localhost:8080 ?
S
Viktor
Боюсь, выхолопа curl не дождаться.
А что, собственно, с pfp-fpm контейнером? Почему он рестартится и не работает?
S
Alexander
что-то не так наконфижил в докерфайле
Viktor
Видимо полный путь до php-fpm стоит в энтрипоит указать
Anton
Голой жопой будет торчать если хост имеет прямое подключение с белым ip - а если нет то нечего париться. )
Anton
Anton
вот пример. `version: "2"
services:
app:
container_name: app
restart: always
build: .
ports:
- "3000:3000"
links:
- mongo
mongo:
container_name: mongo
image: mongo
volumes:
- ./data:/data/db
ports:
- "27017:27017"`
Aibek
Aibek
не помогло (((
Aibek
Смотрел
Aibek
Говорит, что не может подключиться
Anton
куда?
Oleg
Oleg
Говорит, что не может подключиться
1. попробуйте запустить консоль в контейнере с app и написать там ping mongo
2. стартует ли собственно монго? мб крашится по каким-то причинам?
Anton
Oleg
точно так же зайти консоль в контейнер с монгой и написать mongo
Oleg
если законнектится - значит работает
Aibek
Aibek
но коннекта между ними нет (
Aibek
А вот если внутри контейнера с монго пишу “ping mongo” не работает (( Хотя думаю это не имеет отношения ко всему этому
Oleg
вариантов решения два
George
George
Использовать докер-компоуз 2.4
George
Сделать режим стендбай у приклада
Oleg
1. простой. поставить в композе для app политику restart: always или unless-stopped
app стартует, обломается с подключением, завершится, перестартует снова и тп до тех пор пока монга не начнет коннекты принимать
Oleg
2. настроить в mongoose.connect повторные подключения. там вторым параметром можно передать объект options, где среди прочего есть что-то типа reconnectTries и reconnectInterval (кажется так). в документаци к монгусу это есть
Oleg
в обоих вариантах приложению надо дождаться пока монго физически стартанет и будет готова коннекты принимать
George
George
Потому что монга может уйти посередине выполнения приклада
George
Этот кейс тоже нужно рассмотреть.
George
Либо гонять цикл по try/except, либо падать
Oleg
Это говнище
это в любом случае придется сделать скорее всего
вне зависимости от монги
George
Oleg
ну логиченее встеки падать и перезапускаться чем тянуть в бизнес-код всякий инфраструктурный тлен.
сколько раз падать-перезапускаться, с каким интервалом и как вообще на это реагировать — в идеальном мире это тоже должно быть за пределами бизнес-кода по-максимуму =)
George
George
Представь себе, что у тебя контейнер стартует 10 минут
George
И в случае отвала монги на 10 секунд - ты его перезапускаешь. Ну, ведь, дно получается
George
Проще ретраиться, пока монга оживет
Aibek
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!');
});
Aibek
George
Я описал кейс
Oleg
Представь себе, что у тебя контейнер стартует 10 минут
сильно зависит от причин, по которым сервис стартует настолько долго.
если это обучловлено бизнес-логикой (напр, для работы нужен набор внешних данных, которые меньше чем за 10 минут не получить) — то действительно, надо думать: как жить.
конкретно в случае с монгусом — хз как, тк это однопоточный джаваскрипт и провалившись глубоко в эксепшен по дисконнекту, вернуться в какое-то определенное состояние обратно будет проблематично.
если стартует 10 мин потому что это такой макаронный монстр, то можно смело заниматься реконнектами до боли в мозгу — там уже хуже не станет =)
George
George
Но ещё вопрос, что на время рестарта контейнера будут потеряны запросы от клиента
George
Нужно сразу на ситуацию смотреть в целом
Aibek
Господа, рад что подтолкнул вас на столь бурное обсуждение, но не соизволите посоветовать, какой вариант лучше применить?
1. рестарт через композ до победного конца
2. рестарт app пока не будет соединения
Aibek
😀
George
George
И вообще нефиг использовать докер компоуз для прода
George
Мне больше нравится 2
Aibek
Спасибо
Aibek
@ofstudio и Вам большое спасибо!
Aibek
Пойду мучаться со своими контейнерами, пока не сделаю все по-человечески
George
+💯