Mikhail
Может это не тот порт
Alexander
действительно, сходи курлом
S
Можно curlом сходить
Проверил нечего
Alexander
😅
Alexander
127.0.0.1:8080
Alexander
curl 127.0.0.1:8080
Alexander
а, поспешил
S
curl 127.0.0.1:8080
curl: (56) Recv failure: Connection reset by peer
Игорь
А подскажите хорошию тулзу для мониторинга запущенных контейнеров
Aibek
Добрый день! Помогите пожалуйста: ЧТо я хочу сделать. Используя docker-compose поднять веб-сервис ( Nginx + node.js + MongoDB). Nginx работает. MongoDB работает. NodeJs ругается, но я не могу понять почему nodejs не может подключится к базе. Помогите пожалуйста. https://gist.github.com/45Code/d4223341ff61fc6a05c1b4480b03bbfc
Borik
Привет Странного хочу. Есть докер, ктрый запускается на винде. Хочу в него передать в качестве внутренней переменной окружения результаты выполения команды перед его запуском.
Andor
сделай кастомный энтрипоинт, котоырй потом делает exec на родной энтрипоинт
Borik
не, я хочу что-то вроде линуксовго: docker run -e "deep=`date`" --rm alpine env но в винд
S
Ребят, плиз помогите
Aibek
не помогло ((
Viktor
Ребят, плиз помогите
Дайте уже нормальные логи. telnet localhost 8080 что говорит? curl -v localhost:8080 ?
Oleg
не помогло ((
ну хотябы монга не торчит в мир
Viktor
Боюсь, выхолопа curl не дождаться. А что, собственно, с pfp-fpm контейнером? Почему он рестартится и не работает?
S
Боюсь, выхолопа curl не дождаться. А что, собственно, с pfp-fpm контейнером? Почему он рестартится и не работает?
Проверил логи php-fpm выдает такую ошибку /usr/local/bin/docker-php-entrypoint: 9: exec: php-fpm: not found
Alexander
что-то не так наконфижил в докерфайле
Viktor
Видимо полный путь до php-fpm стоит в энтрипоит указать
Anton
хз почему не коннектится но вот это ports: - '27017' из описания монги надо убрать точно, потому что сейчас она торчит голым жопом на весь мир!
Ну не правда кстати. Это значит что будет выбран рандомный порт на хост системе на всех интерфейсах и проброшен в контейнер на 27017 docker-compose ps - должен показать это.
Anton
Голой жопой будет торчать если хост имеет прямое подключение с белым ip - а если нет то нечего париться. )
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
не помогло (((
Anton
не помогло (((
docker-compose logs смотри
Aibek
Смотрел
Aibek
Говорит, что не может подключиться
Anton
куда?
Oleg
Говорит, что не может подключиться
1. попробуйте запустить консоль в контейнере с app и написать там ping mongo 2. стартует ли собственно монго? мб крашится по каким-то причинам?
Anton
ок, монга торчащая наружу на рандомном порту =)
наружу куда?) в 10.10.10.10/28 сеть например
Aibek
1. попробуйте запустить консоль в контейнере с app и написать там ping mongo 2. стартует ли собственно монго? мб крашится по каким-то причинам?
1. Работает. /app # ping mongo PING mongo (172.25.0.2): 56 data bytes 64 bytes from 172.25.0.2: seq=0 ttl=64 time=0.089 ms 64 bytes from 172.25.0.2: seq=1 ttl=64 time=0.160 ms 64 bytes from 172.25.0.2: seq=2 ttl=64 time=0.159 ms 64 bytes from 172.25.0.2: seq=3 ttl=64 time=0.279 ms 64 bytes from 172.25.0.2: seq=4 ttl=64 time=0.157 ms 2. Как узнать?
Oleg
точно так же зайти консоль в контейнер с монгой и написать mongo
Oleg
если законнектится - значит работает
Aibek
но коннекта между ними нет (
Aibek
А вот если внутри контейнера с монго пишу “ping mongo” не работает (( Хотя думаю это не имеет отношения ко всему этому
Oleg
А вот если внутри контейнера с монго пишу “ping mongo” не работает (( Хотя думаю это не имеет отношения ко всему этому
есть еще такой вариант, что монго тупо не успевает стартовать к моменту, когда могнус к ней начинает коннектится. то, что в вашем композе прописано что app зависит от mongo — не гарантирует того, что app будет запускать после того как стартует сама монга. app будет стартовать тогда, когда стартует контейнер с монгой. и не будет ждать пока саммо приложение монги полностью запустится, почистит зубы и начнет принимать соединения
Oleg
вариантов решения два
George
Использовать докер-компоуз 2.4
George
Сделать режим стендбай у приклада
Oleg
1. простой. поставить в композе для app политику restart: always или unless-stopped app стартует, обломается с подключением, завершится, перестартует снова и тп до тех пор пока монга не начнет коннекты принимать
Oleg
2. настроить в mongoose.connect повторные подключения. там вторым параметром можно передать объект options, где среди прочего есть что-то типа reconnectTries и reconnectInterval (кажется так). в документаци к монгусу это есть
Oleg
в обоих вариантах приложению надо дождаться пока монго физически стартанет и будет готова коннекты принимать
George
Потому что монга может уйти посередине выполнения приклада
George
Этот кейс тоже нужно рассмотреть.
George
Либо гонять цикл по try/except, либо падать
Oleg
Это говнище
это в любом случае придется сделать скорее всего вне зависимости от монги
Oleg
ну логиченее встеки падать и перезапускаться чем тянуть в бизнес-код всякий инфраструктурный тлен. сколько раз падать-перезапускаться, с каким интервалом и как вообще на это реагировать — в идеальном мире это тоже должно быть за пределами бизнес-кода по-максимуму =)
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
Нужно сразу на ситуацию смотреть в целом
Oleg
Но ещё вопрос, что на время рестарта контейнера будут потеряны запросы от клиента
зависит. если например, это телеграм бот, то необработанные запросы там висят порядка часов =)
Aibek
Господа, рад что подтолкнул вас на столь бурное обсуждение, но не соизволите посоветовать, какой вариант лучше применить? 1. рестарт через композ до победного конца 2. рестарт app пока не будет соединения
Aibek
😀
George
И вообще нефиг использовать докер компоуз для прода
George
Мне больше нравится 2
Aibek
Спасибо
Aibek
@ofstudio и Вам большое спасибо!
Aibek
Пойду мучаться со своими контейнерами, пока не сделаю все по-человечески
Oleg
Господа, рад что подтолкнул вас на столь бурное обсуждение, но не соизволите посоветовать, какой вариант лучше применить? 1. рестарт через композ до победного конца 2. рестарт app пока не будет соединения
Зависит. Я давно с монгусом не работал, не помню насколько адекватно там реконнект реализован. В любом случае, политику перезапуска приложения для прода лучше определить явно. Мало ли ещё по каким причинам приложение может крашнуться. Тоже касается монги, нжинкса и всего остального что там запускается.
George
+💯