如何指定内存&;docker compose版本3中的CPU限制
我无法为版本3中指定的服务指定CPU和内存 对于版本2,它可以在服务下的“mem_limit”和“cpu_shares”参数下正常工作。但在使用版本3时失败了,除非我使用swarm模式,否则将它们放在部署部分似乎不值得 有人能帮忙吗如何指定内存&;docker compose版本3中的CPU限制,docker,docker-compose,Docker,Docker Compose,我无法为版本3中指定的服务指定CPU和内存 对于版本2,它可以在服务下的“mem_limit”和“cpu_shares”参数下正常工作。但在使用版本3时失败了,除非我使用swarm模式,否则将它们放在部署部分似乎不值得 有人能帮忙吗 version: "3" services: node: build: context: . dockerfile: ./docker-build/Dockerfile.node restart: always en
version: "3"
services:
node:
build:
context: .
dockerfile: ./docker-build/Dockerfile.node
restart: always
environment:
- VIRTUAL_HOST=localhost
volumes:
- logs:/app/out/
expose:
- 8083
command: ["npm","start"]
cap_drop:
- NET_ADMIN
- SYS_ADMIN
更多:
在您的具体情况下:
version: "3"
services:
node:
image: USER/Your-Pre-Built-Image
environment:
- VIRTUAL_HOST=localhost
volumes:
- logs:/app/out/
command: ["npm","start"]
cap_drop:
- NET_ADMIN
- SYS_ADMIN
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
reservations:
cpus: '0.0001'
memory: 20M
volumes:
- logs
networks:
default:
driver: overlay
注意:
- Expose不是必需的,它将根据堆栈网络上的默认值公开
- 图像必须预先构建。不可能在v3中构建
- “重新启动”也不推荐使用。您可以使用“部署”下的“重新启动”和“发生故障时”操作
- 您可以使用一个独立的单节点“swarm”,v3大多数改进(如果不是全部的话)都是针对swarm的
ports:
- 80:80
Docker Compose不支持
deploy
键。只有当您在Docker堆栈中使用版本3 YAML文件时,才考虑使用它
将deploy
键添加到docker compose.yml
文件,然后运行docker compose up-d
警告:某些服务(数据库)使用“deploy”键,这将是
忽略。Compose不支持“部署”配置-使用docker
堆栈部署
部署到群集
文件()说:
指定与的部署和运行相关的配置
服务。这仅在使用docker部署到swarm时生效
堆栈部署,docker compose up和docker compose会忽略它
跑
我知道这个话题有点过时,但无论如何,我可以使用以下选项:
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
使用docker compose的3.7版本时
在我的情况下,有帮助的是使用以下命令:
docker compose——兼容性升级
--兼容性
标志代表(取自文档):
如果设置,Compose将尝试将v3文件中的部署密钥转换为
它们的非群等价物
我认为这很好,我不必将docker compose文件恢复到v2。1。我能够使用版本3构建图像
2。看起来v3的方法和v2完全不同,不像升级
3。部署似乎只在群集模式下工作。我收到警告-
“警告:某些服务(节点)使用“部署”键,该键将被忽略。Compose不支持部署配置-使用
docker stack deploy
部署到swarm。”@viveky4d4v作为Compose格式v3文档的状态,如果不使用swarm,则忽略deploy
。除非您使用Swarm,否则没有理由使用v3格式。如果开始新的部署,我会从v3开始。即使我只有一个主人。所以你有可能在以后扩展,这和你理解这个概念后所需要的时间是一样的。嗨,康纳,当我编辑答案时,我所做的只是纠正一个断开的链接。和您一样,我也无法理解“仅内部”在这里的含义。@Berndinox您是否知道如何设置在中提到的内存交换
选项?我没有看到如何在docker compose.yml
()中设置它的示例。非常感谢。提供docker compose项目中创建的相关问题的链接:特别是文档中说,如果您想这样做,请使用v2或部署到swarm。使用docker compose 3.7,您可以添加--compatibility标志,它将把3.x文件中的部署限制转换为非swarm执行。e、 g.docker compose--compatibility Supporte是指向@DavidThomas提到的--compatibility
标志的文档链接:感谢您指出这一点。。。但它仍然存在一个问题:如何简单地在docker compose文件中对每个容器应用内存限制?这可能会提供一些背景知识。。。但毕竟,需要在docker compose之外运行另一个应用程序来简单地限制硬件资源,这显然不是最佳选择……有趣的是,这个选项有一个“转换是一种“尽力而为”的尝试,不应该依赖于生产部署。”这是一个很好的解决方案,适用于设计拙劣的程序,docker撰写。docker compose正试图成为一个生产级的编排器:如果容器RAM/CPU>docker for Windows/Mac可用,您的资源约束将不会生效。要更改此设置,请转到Docker for Mac/Windows preferences->resources并进行相应调整。为什么在此处使用非整数CPU:“0.001”?是“一个还是没有”?来自@four43的感谢链接仍然是金色的:——
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M