#nodejs_api #docker
Docker контейнеры созданы, чтобы запускать только один процесс. У этого процесса id всегда 1. Рекомендуемый запуск #nodejs:
ENTRYPOINT ["node", "src/index.js"]Тогда на уровне кода легко проверить
const isDocker = process.pid === 1Кроме айди текущего процесса (process.pid), у нас есть айди родительского процесса – process.ppid. Для стартового процесса он равен 0.
Если вы запускаете через
npm run ..., то npm будет иметь pid=1 и являться родительским процессом для Node.js. Так делать не следует. Возможные варианты использования:
1️⃣ При локальной разработке использовать человекочитаемые логи, а внутри Docker в формате json:
const pino = require('pino');const logger = pino({ prettyPrint: process.pid !== 1 });Требует pino-pretty.
2️⃣ Переходить в debug режим по нажатию ctrl+T.
if (process.pid !== 1) { process.on('SIGINFO', () => { require('inspector').open(); });}Это автоматизация для дебага запущенного процесса. Без нее сначала узнаем айди процесса через ctrl+T, а потом делаем
kill -SIGUSR1 <pid>