Як вказати ліміт пам’яті та процесора у докер-композиційній версії 3


111

Я не можу вказати процесор і пам'ять для служб, визначених у версії 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

4
Надайте посилання на пов’язану проблему, створену у проекті docker
Гійом Хуста

Відповіді:


91

Я знаю, що тема трохи стара і здається застарілою, але все одно я зміг скористатися цими параметрами:

    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M

при використанні 3.7 версії докер-композиту

Що допомогло в моєму випадку, було використання цієї команди:

docker-compose --compatibility up

--compatibility прапор означає (взято з документації):

Якщо встановлено, Compose спробує перетворити ключі розгортання у файлах v3 у їх еквівалент не-Swarm

Вважайте, що це чудово, що мені не потрібно повертати свій файл докер-композиції назад до v2.


4
Цікаво, що цей параметр має зауваження : "Перетворення - це спроба" найкращих зусиль ", і на неї не слід покладатися."
bartolo-otrit

3
Це чудове виправлення для погано розробленої програми, докер-композиції. docker-compose дуже сильно намагається бути тим, що це не так, оркестровий клас виробництва: github.com/docker/compose/issues/4513
four43

1
Ваші обмеження ресурсів не наберуть чинності, якщо контейнер RAM / CPU> Docker для Windows / Mac доступний. Щоб змінити це, перейдіть до налаштувань Docker для Mac / Windows-> та відрегулюйте відповідно.
8bitme

58
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

Примітка:

  • Експозиція не потрібна, вона буде виставлена ​​за замовчуванням у вашій стеці мережі.
  • Зображення мають бути попередньо створені. Зробити в v3 неможливо
  • "Перезапуск" також застарілий. Ви можете використовувати перезапуск під час розгортання з відмовою від дії
  • Ви можете використовувати окремий один вузол "рій", більшість вдосконалень v3 (якщо не всі) стосуються рій

Також зверніть увагу: Мережі в режимі Рой не перетинаються. Якщо ви хочете підключитися лише внутрішньо, вам доведеться підключитися до мережі. Ви можете 1) вказати зовнішню мережу в іншому складеному файлі або створити мережу за допомогою параметра --attachable (docker network create -d overlay My-Network --attachable) В іншому випадку ви повинні опублікувати порт так:

ports:
  - 80:80

6
1. Я вмію створювати зображення за допомогою версії 3. <br/> 2. Схоже, підхід для v3 абсолютно не відрізняється від v2, а не як оновлення. <br/> 3. Здається, розгортання працює лише у режимі рій. Мені надходять попередження - <br/> "ПОПЕРЕДЖЕННЯ. Деякі служби (вузол) використовують клавішу" розгорнути ", яка буде проігнорована. Композиція не підтримує конфігурацію розгортання - використовуйте docker stack deployдля розгортання до рою."
vivekyad4v

23
@ viveky4d4v У форматі Compose v3 doc, deployігнорується, якщо ви не використовуєте Swarm. Дійсно немає причин використовувати формат v3, якщо ви не використовуєте Swarm.
Дан Лоу

2
Якщо запускати нове розгортання, я б почав з v3. Навіть якщо у мене просто один господар. Таким чином, ви отримали можливість масштабувати пізніше, і це стільки ж часу вам знадобиться, як тільки ви зрозумієте концепцію.
Berndinox

1
Привіт @Connor, коли я відредагував відповідь, все, що я зробив, - це виправити непрацюючу посилання. Як і ви, я не в змозі розшифрувати, що тут означає "внутрішньо".
Джей Тейлор

3
@Berndinox Ви знаєте, як встановити memory-swapпараметр, згаданий на docs.docker.com/v17.12/config/containers/resource_constraints/… ? Я не бачу прикладу того, як його встановити docker-compose.yml( docs.docker.com/v17.12/compose/compose-file/#resources ). Дуже дякую.
Райан

49

Docker Compose не підтримує на deployклавішу. Це дотримується лише тоді, коли ви використовуєте свій файл YAML версії 3 у Docker Stack.

Це повідомлення друкується, коли ви додаєте deployключ до docker-compose.ymlфайлу та потім запускаєтеdocker-compose up -d

ПОПЕРЕДЖЕННЯ: Деякі служби (база даних) використовують клавішу "розгортання", яка буде ігнорована. Compose не підтримує конфігурацію "розгортання" - використовуйте docker stack deployдля розгортання до рою.

Документація ( https://docs.docker.com/compose/compose-file/#deploy ) говорить:

Вкажіть конфігурацію, пов’язану з розгортанням та запуском служб. Це набуває чинності лише при розгортанні у рій із розгортанням стекового докера і ігнорується докер-композицією та запуском докер-композиції.


2
Зокрема, документи говорять, якщо ви хочете це зробити, використовуйте v2 або розгортайтеся для рою.
ic_fl2
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.