即使清除 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 上。服务器具有低 CPU 负载、100+GB 的可用 RAM 和数 TB 的可用磁盘空间。
我有一个现有的数据库,它已经受到此版本的影响,并且我不想冒险降级。
我见过这个问题但没有理由导致 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
希望在 MariaDB 版本中能够修复该问题10.8.3
。
答案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 终止支持。