Docker 不支持在 /etc/docker/daemon.json 中设置全局 --memory-reservation 默认值;该参数必须在 docker run 或 docker-compose.yml 中显式指定,或通过 shell 别名、封装脚本实现简化。
在 docker 中,无法通过 /etc/docker/daemon.json 直接设置容器的“默认内存保留值”(即 --memory-reservation)。
daemon.json 不支持全局 memory-reservation 默认值
Docker 的 daemon.json 文件用于配置守护进程行为(如数据目录、镜像仓库、日志驱动、默认网络等),但不支持为所有容器指定默认的内存限制或保留参数。像 --memory、--memory-reservation、--cpus 这类资源约束,必须在运行容器时显式传入(通过 docker run 或编排文件),Docker 守护进程本身不会自动为每个容器注入这些值。
替代方案:使用 wrapper 脚本或别名
若希望简化操作、避免每次手动加参数,可考虑以下实用方式:
-
定义 shell 别名:例如在
~/.bashrc中添加alias drun='docker run --memory-reservation=512m',之后用drun -it ubuntu即自动带上保留值。 -
编写封装脚本:创建
/usr/local/bin/docker-run-with-reservation,内部调用docker run --memory-reservation=512m "$@",并赋予执行权限。 -
在 docker-compose.yml 中设默认值:对编排场景,在服务定义中统一写
mem_reservation: 512m,比单个命令更可控。
注意 memory-reservation 的实际效果
--memory-reservation 是一个软限制,仅在内存紧张时起作用(Docker 会尝试将容器内存压到该值以下,但不强制阻止超用)。它不能替代 --memory(硬限制)。若未设 --memory,容器仍可能耗尽主机内存。生产环境建议同时配置两者:
docker run --memory=1g --memory-reservation=512m nginx
验证 daemon.json 配置是否生效
修改 /etc/docker/daemon.json 后需重载配置:
sudo systemctl daemon-reloadsudo systemctl restart docker- 检查是否报错:
sudo journalctl -u docker --since "1 minute ago"
可通过 docker info | grep -i cgroup 或 docker info | grep -A 5 "Default Runtime" 确认守护进程级配置已加载(但其中不会显示任何 memory-reservation 相关字段,印证其不被支持)。


















