rTorrent Docker容器启动失败,提示std::bad_alloc

ars1skjm  于 2023-04-05  发布在  Docker
关注(0)|答案(1)|浏览(138)

我已经在我的家庭服务器上的docker堆栈中运行rTorrent有一段时间了,但是在最近更新Arch Linux主机后,我无法启动它。我能从它得到的唯一错误是“rtorrent:std::bad_alloc”,没有其他的。我假设这个问题是由其中一个更新的软件包引起的,但是因为大约400个软件包被更新了,所以不可能分辨出是哪个。
我尝试了几个不同的发行版和容器,其中包含rtorrent,它们都有同样的问题。然而,我测试的所有变体在裸机上运行良好。我尝试制作自定义容器,其中只有rtorrent,也有同样的问题。我在不同的机器上测试了容器(WSL2 Ubuntu)具有相同的配置、图像和合成文件,它们启动起来很好。我仔细检查了RAM和存储,两者都远远没有达到容量。
此外,所有测试的容器都可以在podman中再次工作,没有任何变化。我暂时在podman下运行它们,但由于一些配置限制,我想回到docker。我可以根据需要提供任何日志,但据我所知,没有进一步的输出。我相信系统重新镜像会解决这个问题,但我试图避免这种情况,因为这将是一项相当大的任务。

8hhllhi2

8hhllhi21#

我也遇到了和你一样的问题。我花时间调查了一下,发现这个错误是在试图分配一个由变量_SC_OPEN_MAX决定大小的数组时抛出的。
由于某种原因,我的配置中的值最近发生了更改。
我建议在裸机上编译并运行以下程序:

#include <unistd.h>
#include <iostream>

int main()
{
    std::cout << sysconf(_SC_OPEN_MAX) << std::endl;
}

您将获得系统的值。然后在运行容器时使用此值作为最大值:

docker run --rm -v --ulimit nofile=<your-value>:<your-value> your-image ./myapp

或者在你的docker-compose中,在image键的同一级别:

ulimits:
    nofile:
        hard: <your-value>
        soft: <your-value>

这解决了我的问题。这个thread on docker forum将给予你进一步的信息。

相关问题