我在使用 Docker for Windows 时遇到了问题,但在网上没有找到任何有用的答案。
我发现https://stackoverflow.com/questions/21799382/is-there-a-maximum-number-of-containers-running-on-a-docker-host/21801470答案可以归结为“限制是由系统资源设定的”。
这要么不适用于 Windows 系统,要么 - 更有可能的是 - 我不知道我遇到的限制。
我有一个基于的 Docker 映像microsoft/dotnet:2.1-aspnetcore-runtime
,它是作为 Linux 容器创建的,应该在 Win 10 Pro 机器上的 Windows 版 Docker 上运行(在开发期间)。
我可以启动此映像的多个容器,它们都按预期工作。但是,我无法使用以下方法启动超过上述 64 个容器
docker run -d -v C:\Users\Public\Documents\DockerShare:/app/SharedData dockerImage:latest
我最初将 Docker 的限制设置为 10GB,后来将其增加到 16GB,但毫无效果。此外,运行 Kestrel 服务器的 64 台机器仅占用 1.8GB 的内存(空闲时,因为它们刚启动时)。
另一个接触点是每个容器在启动时挂载的共享。
我也检查了https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-file但似乎没有属性可以限制其中的容器数量。
更新
我在 Ubuntu 18.04.2 LTS 上尝试了同样的操作,结果相同。一旦我到达容器 #65 的开头,容器就会立即退出,代码为 139。卷当然会更改为 Linux 路径,例如
docker run -d -v ~/DockerShare:/app/SharedData dockerImage:latest
答案1
我似乎找到解决办法了。
在将所有服务升级到 ASPNET Core 2.2 后,我检查了代码,以检查是否存在指向以前的 donet core 版本的硬链接,并在文件中找到了以下几Startup.cs
行
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
// ====
// ^
// |
[...]
}
_2_1
替换并重建容器后,_2_2
我能够毫无问题地启动 100 个容器。