Как указать ограничение памяти и процессора в докере составляют версию 3
Я не могу указать CPU и память для служб, указанных в версии 3.
С версией 2 он отлично работает с параметрами "mem_limit" и "cpu_shares" под услугами. Но сбой при использовании версии 3, если поставить их в раздел развертывания, не кажется достойным, если я не использую режим роя.
Может ли кто-нибудь помочь?
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
Ответы
Ответ 1
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
reservations:
cpus: '0.0001'
memory: 20M
Подробнее: 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
Замечания:
- Expose не является необходимым, он будет выставлен по умолчанию в вашей сети стека.
- Изображения должны быть предварительно построены. Сборка в v3 невозможна
- "Перезагрузка" также устарела. Вы можете использовать перезагрузку при развертывании с действием по ошибке
- Вы можете использовать отдельный узел "роя", v3 большинство улучшений (если не все) предназначены для роя
Также обратите внимание: сети в режиме Swarm не соединяются. Если вы хотите подключиться только внутри, вы должны подключиться к сети. Вы можете 1) указать внешнюю сеть в другом файле компоновки или создать сеть с параметром --attachable (docker network создать оверлей -d My-Network --attachable). В противном случае вы должны опубликовать порт следующим образом:
ports:
- 80:80
Ответ 2
Docker Compose не поддерживает ключ deploy
. Это соблюдается только при использовании вашего файла YAML версии 3 в стеке Docker.
Это сообщение печатается, когда вы добавляете ключ deploy
в файл docker-compose.yml
а затем запускаете docker-compose up -d
ВНИМАНИЕ: Некоторые сервисы (база данных) используют ключ 'deploy', который будет игнорироваться. Compose не поддерживает конфигурацию 'deploy' - используйте docker stack deploy
для развертывания в рое.
Документация (https://docs.docker.com/compose/compose-file/#deploy) гласит:
Укажите конфигурацию, связанную с развертыванием и запуском сервисов. Это действует только при развертывании в рой с развертыванием стека докеров и игнорируется при выполнении docker-compose up и docker-compose.
Ответ 3
Я знаю, что эта тема немного устарела и кажется устаревшей, но в любом случае я смог использовать следующие параметры:
deploy:
resources:
limits:
cpus: '0.001'
memory: 50M
при использовании 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
Думаю, это здорово, что мне не нужно возвращать свой файл docker-compose обратно в v2.