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

latest目前Docker Hub 上的映像像是 10.8.3 。圖像標籤是ea81af801379.這是在 64 位元 Ubuntu 18.04 上。此伺服器具有較低的 CPU 負載、100+GB 的可用 RAM 和 TB 的可用磁碟空間。

我有一個現有的資料庫,該版本已經涉及該資料庫,我不想冒降級的風險。

我見過這個問題但 MariaDB 沒有理由無法創建執行緒。

我該如何解決這個問題?

答案1

解決方案是將MariaDB版本變更為避免version 10.8.3,例如透過強製mariadb:10.8.2mariadb:10.7或 來設置--security-opt seccomp=unconfined

如果您的 Dockerfile 或 docker-compose 正在引用mariadb:latestmariadb:10in Summer 2022,則它指向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

latest我在 Gitlab CI 上運行 MariaDB () 時遇到了同樣的問題測試容器對於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 年 2 月 14 日結束支持,而 Docker 19.03(20.10 之前的版本)於 2021 年 7 月 21 日停止支援。

相關內容