Docker 中的 MariaDB 10.8.3:无法初始化计时器

Docker 中的 MariaDB 10.8.3:无法初始化计时器

即使清除 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 目前是latestDocker Hub 上的镜像。镜像标签为ea81af801379。这是在 64 位 Ubuntu 18.04 上。服务器具有低 CPU 负载、100+GB 的可用 RAM 和数 TB 的可用磁盘空间。

我有一个现有的数据库,它已经受到此版本的影响,并且我不想冒险降级。

我见过这个问题但没有理由导致 MariaDB 创建线程失败。

我该如何解决这个问题?

答案1

解决方案是将 MariaDB 版本更改为避免版本10.8.3,例如通过强制mariadb:10.8.2mariadb:10.7,或设置--security-opt seccomp=unconfined

如果您的 Dockerfile 或 docker-compose 引用了mariadb:latestmariadb:102022 年夏季,则指向mariadb:10.8.3

与 @Arno 的帖子相反,Docker 版本不是问题。我正在运行 Docker 20.10.17,问题仍然存在。

您也可以直接使用更新的安全配置文件运行:

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

希望在 MariaDB 版本中能够修复该问题10.8.3

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

答案2

此问题已报告在 GitHub 上. 升级 Docker 似乎可以修复该问题。

答案3

我在运行 MariaDB 时也遇到了同样的问题(latest我在 Gitlab CI 上测试容器对于 Java。

使用seccomp=unconfined安全选项 - 正如@Arno 链接的 Github 报告中所讨论的那样,为我解决了这个问题。

启用此功能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 即将于 2023-02-14 结束支持,而 Docker 19.03(20.10 之前的版本)将于 2021-07-21 终止支持。

相关内容