MariaDB 10.8.3 в Docker: невозможно инициализировать таймеры

MariaDB 10.8.3 в Docker: невозможно инициализировать таймеры

Эта ошибка возникает даже после очистки кэша образа Docker:

$ docker run -it --rm mariadb:10.8.3
2022-06-15 11:28:14+00:00 [Note] [Entrypoint]: Entrypoint script for MariaDB Server 1:10.8.3+maria~jammy started.
2022-06-15 11:28:14+00:00 [ERROR] [Entrypoint]: mariadbd failed while attempting to check config
        command was: mariadbd --verbose --help --log-bin-index=/tmp/tmp.EUcxIEz4Yz
        Can't initialize timers

10.8.3 — это текущий latestобраз на Docker Hub. Тег образа — ea81af801379. Это 64-битная Ubuntu 18.04. На сервере низкая загрузка ЦП, 100+ ГБ свободной оперативной памяти и терабайты свободного места на диске.

У меня есть существующая база данных, которая уже была затронута этой версией, и я не хотел бы рисковать, переходя на более раннюю версию.

Я виделЭта проблемано нет никаких причин, по которым MariaDB не сможет создать поток.

Как мне решить эту проблему?

решение1

Решение — изменить версию MariaDB наизбегатьверсия 10.8.3, например, принудительно mariadb:10.8.2или mariadb:10.7, или установить--security-opt seccomp=unconfined

Если ваш Dockerfile или docker-compose ссылаются на mariadb:latestили mariadb:10летом 2022 года, это указывает на mariadb:10.8.3.

Вопреки сообщению @Arno, проблема не в версии Docker. Я использую Docker 20.10.17, и проблема сохраняется.

Вы также можете напрямую запустить обновленный профиль безопасности:

docker run --security-opt seccomp=/etc/docker/profiles-seccomp-scmp-act-trace.json

Надеюсь, исправление будет в 10.8.3новой версии MariaDB.

https://github.com/MariaDB/mariadb-docker/issues/434

решение2

О проблеме сообщенона GitHub. Обновление Docker, похоже, исправило эту проблему.

решение3

У меня была та же проблема при запуске MariaDB ( latest) на Gitlab CI с использованиемТестовые контейнерыдля Явы.

Использование seccomp=unconfinedпараметра безопасности, как обсуждалось в сообщении Github, ссылка на которое есть у @Arno, решило эту проблему для меня.

Включение этого метода testcontainers-javaнемного странно, поэтому вот последовательность действий, если читатели столкнутся с той же проблемой с тестовыми контейнерами:

var container = new MariaDBContainer<>("mariadb:latest")
.withCreateContainerCmdModifier(cmd -> {
    var cfg = cmd.getHostConfig();
    List<String> seclist = Objects.requireNonNullElseGet(cfg.getSecurityOpts(),
            LinkedList::new);
    seclist.add("seccomp=unconfined");
    cfg.withSecurityOpts(seclist);
});

решение4

Этот же вопрос был задан на StackOverflow — пожалуйста, посмотрите мой ответ там.https://stackoverflow.com/a/72467817

Подводя итог, ваша версия docker, скорее всего, < 20.10.10, что является минимально необходимой для использования образов на основе Jammy. MariaDB > 10.8.2 использует Jammy, поэтому здесь есть конфликт.

Обновление Docker на данный момент является единственным правильным вариантом — поддержка MariaDB 10.7 заканчивается 14 февраля 2023 г., а поддержка Docker 19.03 (выпуск до 20.10) прекращена 21 июля 2021 г.

Связанный контент