消耗一定量的内存时重启docker

Ale*_*exV 6 docker

我在一台机器上运行了多个docker进程,我想监视它们并在它通过某个内存阈值后重启docker进程.我可以让docker在达到内存阈值时重启它的进程吗?我有什么选择?

谢谢

亚历克斯

小智 10

永远记住,如果你不设置--memory-swap,容器将不会在--memory值限制下重新启动,因为Docker将在达到--memory限制后使用Swap,所以,如果你想在--memory值限制下重新启动值,您需要将 --memory-swap 设置为与 --memory limit 相同的值。

docker run --memory 50m --memory-swap 50m --rm -it progrium/stress --vm 1 --vm-bytes 62914560 --timeout 1s
Run Code Online (Sandbox Code Playgroud)


kst*_*aos 8

您可以创建一个shell脚本来监视资源使用情况,并在达到内存限制时重新启动Docker守护程序,但我认为这实际上并不是一个好方法.

使用此命令可以查看按内存使用情况排序的容器.找出哪个容器使用了太多内存并尝试找到原因,因为这种情况正在发生.

docker stats --no-stream --format "table {{.Name}}\t{{.Container}}\t{{.CPUPerc}}\t{{.MemUsage}}" | sort -k 4 -h

此外,如果容器的内存消耗正常,但您想限制它,则可以限制分配给每个容器的资源.为此,您可以使用选项--memorydocker run.

有关内存限制的更多信息,请在Docker文档中查看此信息:https://docs.docker.com/engine/admin/resource_constraints/

希望这有帮助,祝你好运.

编辑:回答您的回复,如果您的容器内存不足,它将被内核自动杀死.您可以使用选项配置内存限制--memory,并将重启策略设置为--restart=always.这样,您的容器将被OOM(内存不足)错误自动终止,但它将重新启动,因为它的重启策略是在任何错误后继续重启.