viv*_*d4v 76 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
environment:
- VIRTUAL_HOST=localhost
volumes:
- logs:/app/out/
expose:
- 8083
command: ["npm","start"]
cap_drop:
- NET_ADMIN
- SYS_ADMIN
Run Code Online (Sandbox Code Playgroud)
Ber*_*nox 43
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
reservations:
cpus: '0.0001'
memory: 20M
Run Code Online (Sandbox Code Playgroud)
更多:https://docs.docker.com/compose/compose-file/#resources
在你的具体情况:
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
Run Code Online (Sandbox Code Playgroud)
注意:
另请注意: Swarm模式下的网络不会桥接.如果您只想在内部连接,则必须连接到网络.您可以1)在其他撰写文件中指定外部网络,或者必须使用--attachable参数创建网络(docker network create -d overlay My-Network --attachable)否则您必须发布端口,如:
ports:
- 80:80
Run Code Online (Sandbox Code Playgroud)
saw*_*303 38
泊坞窗撰写不支持的deploy
关键.当您在Docker堆栈中使用版本3 YAML文件时,它才受到尊重.
将deploy
密钥添加到docker-compose.yml
文件然后运行时,将打印此消息docker-compose up -d
警告:某些服务(数据库)使用"部署"密钥,该密钥将被忽略.Compose不支持"部署"配置 - 用于
docker stack deploy
部署到群组.
文档(https://docs.docker.com/compose/compose-file/#deploy)说:
指定与部署和运行服务相关的配置.这仅在使用docker stack deploy部署到swarm时生效,并且被docker-compose up和docker-compose run忽略.
sec*_*vfr 31
这可以通过 version >=实现3.8
。这是使用 docker-compose >= 的示例1.28.x
:
version: '3.9'
services:
app:
image: nginx
cpus: "0.5"
mem_reservation: "10M"
mem_limit: "250M"
Run Code Online (Sandbox Code Playgroud)
其工作证明(请参阅 MEM USAGE)列:
达到内存限制时的预期行为是容器被杀死。在这种情况下,无论是设置restart: always
还是调整您的应用程序代码。
Docker compose v3 中的限制和重新启动设置现在应使用以下命令进行设置(restart: always
也已弃用):
deploy:
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
window: 120s
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
Run Code Online (Sandbox Code Playgroud)
Rig*_*igi 24
我知道这个话题有点老,看起来很陈旧,但是无论如何我都可以使用这些选项:
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
Run Code Online (Sandbox Code Playgroud)
使用3.7版本的docker-compose时
对我而言,有用的是使用以下命令:
docker-compose --compatibility up
--compatibility
标志代表(摘自文档):
If set, Compose will attempt to convert deploy keys in v3 files to their non-Swarm equivalent
Run Code Online (Sandbox Code Playgroud)
觉得很棒,我不必将docker-compose文件还原回v2。
Jam*_*udd 15
docker-compose
我认为这里使用and docker compose
(带有空格)存在混淆。如果您还没有安装 compose 插件,可以使用https://docs.docker.com/compose/install进行安装。
这是一个刚刚运行 Elasticsearch 的示例撰写文件
version: "3.7"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.15.2
restart: always
ports:
- "9222:9200"
deploy:
resources:
limits:
cpus: "4"
memory: "2g"
environment:
- "node.name=elasticsearch"
- "bootstrap.memory_lock=true"
- "discovery.type=single-node"
- "xpack.security.enabled=false"
- "ingest.geoip.downloader.enabled=false"
Run Code Online (Sandbox Code Playgroud)
我把它放在一个名为 的目录中,estest
该文件名为es-compose.yaml
. 该文件设置 CPU 和内存限制。
如果您使用docker-compose
例如启动
docker-compose -f es-compose.yaml up
Run Code Online (Sandbox Code Playgroud)
然后看docker stats
你看
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
e3b6253ee730 estest_elasticsearch_1 342.13% 32.39GiB / 62.49GiB 51.83% 7.7kB / 0B 27.3MB / 381kB 46
Run Code Online (Sandbox Code Playgroud)
所以CPU和内存资源限制被忽略。在启动过程中您会看到警告
WARNING: Some services (elasticsearch) use the 'deploy' key, which will be ignored. Compose does not support 'deploy' configuration - use `docker stack deploy` to deploy to a swarm.
Run Code Online (Sandbox Code Playgroud)
我认为这就是人们关注 Docker stack/swarm 的原因。但是,如果您只是切换到使用docker compose
docker CLI 中内置的较新版本https://docs.docker.com/engine/reference/commandline/compose/例如
docker compose -f es-compose.yaml up
Run Code Online (Sandbox Code Playgroud)
再看看docker stats
你会发现
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
d062eda10ffe estest-elasticsearch-1 0.41% 1.383GiB / 2GiB 69.17% 8.6kB / 0B 369MB / 44MB 6
Run Code Online (Sandbox Code Playgroud)
因此,已应用限制。
在我看来,这比 swarm 更好,因为它仍然允许您将容器构建为 compose 项目的一部分,并通过文件轻松传递环境。我建议尽可能删除docker-compose
并切换到使用较新的版本docker compose
。
归档时间: |
|
查看次数: |
80174 次 |
最近记录: |