Docker 1.6.2 - 每个容器的内存限制不起作用

Docker 1.6.2 - 每个容器的内存限制不起作用

我有一个以微服务形式运行的应用程序。每个微服务都在单独的 Docker 容器中运行。我正在寻找设置每个容器可以使用的最大允许内存的方法。目前我有 12 个,占用了全部 16GB RAM。有时这会因为延迟而导致在控制台上工作有点困难。

我正在使用类似这样的命令启动容器

docker run -d -p 8093:8080 --env-file ./saturno-environment-files/edge-server.list --name edge-server acisa/edge-server --memory=1g

我在 docker inspect -container- 中看到该命令被正确识别

root@PlatformServer:/sys/fs/cgroup/memory/system.slice# docker inspect edge-server [{ "AppArmorProfile": "", "Args": [ "-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=${PROFILE_ACTIVE}", "-jar", "/app.jar", "--memory=1g" ], "Config": { "AttachStderr": false, "AttachStdin": false, "AttachStdout": false, "Cmd": [ "--memory=1g" ], 但不幸的是,容器仍然占用了高达 80% 至 95% 的内存。在 docker stats 中,我看到内存限制仍然是 15.68GiB(服务器中的物理 RAM),让我感到好奇的是 MEM USAGE 报告为 0B。 CONTAINER CPU % MEM USAGE/LIMIT MEM % NET I/O edge-server 0.00% 0 B/15.68 GiB 0.00% 13.65 MiB/38.12 MiB

答案1

您在图像名称后传递的所有内容都将成为CMD容器的值,并且当您定义了入口点时,cmd 将成为入口点末尾的参数。因此,使用您提供的命令:

  • docker run:带有运行选项的docker客户端
  • -d:分离
  • -p 8093:8080:将容器端口 8080 暴露给主机端口 8093
  • --env-file ./saturno-environment-files/edge-server.list:使用此文件传递环境变量
  • --name edge-server:命名容器
  • acisa/edge-server:首先,这不是一个标志docker run,这是你的图像名称,并结束参数docker run
  • --memory=1g:作为参数传递给图像入口点的 cmd

要修复此问题,您只需重新排序 cli 选项:

docker run -d -p 8093:8080 --env-file ./saturno-environment-files/edge-server.list --name edge-server --memory=1g acisa/edge-server

请注意,内存配额功能可能还依赖于较新的内核,并且您安装的 docker 已经非常过时。

相关内容