如何在docker-compose中配置swap内存,配置时'memory-swap'报错如何解决?
错误原因
memory-swap不是deploy.resources.reservations下的合法配置字段,该参数属于资源上限配置,只能放在limits段下deploy段的所有资源配置默认是Docker Swarm集群模式专属,如果你使用docker-compose up做单机部署,该段配置不会被识别,直接配置会触发报错
解决方案
场景1:单机docker-compose部署(用docker-compose up启动)
直接把内存、swap限制放在服务的根配置层级,不要嵌套在deploy段内,修改后的配置参考:
version: "3.3" services: app-cnn: build: ./app image: "app-cnn" restart: always container_name: app-cnn ports: - "5000:5000" # 资源限制直接写在服务根层级 mem_limit: 3G memswap_limit: 6G
这里的memswap_limit是总可用内存(物理内存+swap),配置6G就代表容器最多可以用3G物理内存+3G swap,符合你的需求。
场景2:Swarm集群部署(用docker stack deploy启动)
把memory-swap从reservations移动到limits段下即可,修改后的配置参考:
version: "3.3" services: app-cnn: build: ./app image: "app-cnn" restart: always container_name: app-cnn ports: - "5000:5000" deploy: replicas: 1 resources: limits: memory: 3G memory-swap: 6G
注意事项
如果配置后swap还是不生效,可执行docker info | grep Swap检查,如果输出WARNING: No swap limit support,说明系统没开启Docker的swap限制支持,需要修改/etc/default/grub文件,在GRUB_CMDLINE_LINUX参数后添加cgroup_enable=memory swapaccount=1,之后执行update-grub重启系统即可生效。
内容的提问来源于stack exchange,提问作者arush1836
相关产品推荐
相关产品推荐

