Docker Container для запуска процесса периода, который заполняет базу данных - PullRequest
1 голос
/ 11 июля 2019

Используя docker compose, я создал стек докера с веб-интерфейсом и сервером базы данных Mongo. Мне нужно периодически запускать процесс, скажем, раз в час, который заполняет мою базу данных, выполняя сценарий node.js. В идеале мне нужно что-то, что будет работать в качестве контейнера-докера, чтобы я мог просто определить скрипт node.js и добавить контейнер в мой файл docker-compose.yml. Я прочитал несколько постов, которые используют cron для автоматизации простых задач. Будет ли этот подход расширяемым для выполнения обновлений моей базы данных тоже?

1 Ответ

1 голос
/ 12 июля 2019

cron может сделать трюк.Учитывая, что вы собираетесь запустить скрипт Node.js, почему бы вам не реализовать планирование в самом скрипте.Использование async, например:

async function sleep(millis) {
    return new Promise(resolve => setTimeout(resolve, millis));
}

async function updatedb() {
    while(true)
        console.log("updating database");
        // ... update the database, await if necessary
        // then sleep one hour
        await sleep(60 * 60 * 1000);
    }
}

updatedb();

Установить скрипт как команду для запуска (CMD) внутри контейнера

CMD ["nodejs", "/path/to/updatedb.js"]

Преимущество состоит в том, что все в одномместо и избегает дополнительной crontab конфигурации.Надеюсь, это поможет.

...