วิธีระบุขีด จำกัด หน่วยความจำและ CPU ในนักเทียบท่าเขียนเวอร์ชัน 3


114

ฉันไม่สามารถระบุ 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

4
ให้ลิงก์ไปยังปัญหาที่เกี่ยวข้องซึ่งสร้างในโครงการนักเทียบท่า: github.com/docker/compose/issues/4513
Guillaume Husta

คำตอบ:


94

ฉันรู้ว่าหัวข้อนี้เก่าไปหน่อยและดูเหมือนจะเก่า แต่อย่างไรก็ตามฉันก็สามารถใช้ตัวเลือกเหล่านี้ได้:

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

เมื่อใช้ Docker-compose เวอร์ชัน 3.7

สิ่งที่ช่วยในกรณีของฉันคือใช้คำสั่งนี้:

docker-compose --compatibility up

--compatibility ธงย่อมาจาก (นำมาจากเอกสารประกอบ):

หากตั้งค่าไว้ Compose จะพยายามแปลงการปรับใช้คีย์ในไฟล์ v3 ให้เทียบเท่ากับไม่ใช่ Swarm

คิดว่าดีมากที่ฉันไม่ต้องแปลงไฟล์นักเทียบท่าเขียนกลับไปเป็น v2


4
สิ่งที่น่าสนใจคือตัวเลือกนี้มีหมายเหตุ : "การแปลงเป็นความพยายาม" อย่างดีที่สุด "และไม่ควรพึ่งพาการปรับใช้ในการผลิต"
bartolo-otrit

3
นี่เป็นวิธีแก้ไขที่ยอดเยี่ยมสำหรับโปรแกรมที่ออกแบบมาไม่ดีนักเทียบท่าเขียน นักเทียบท่า - เรียบเรียงพยายามอย่างหนักเกินกว่าจะเป็นสิ่งที่ไม่ใช่ออเคสตเตอเรเตอร์เกรดการผลิต: github.com/docker/compose/issues/4513
four43

1
ข้อ จำกัด ทรัพยากรของคุณจะไม่มีผลหากคอนเทนเนอร์ RAM / CPU> Docker สำหรับ Windows / Mac มีให้ใช้งาน หากต้องการเปลี่ยนสิ่งนี้ให้ไปที่การตั้งค่า Docker สำหรับ Mac / Windows -> ทรัพยากรและปรับเปลี่ยนตามนั้น
8bitme

59
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 ไม่ได้
  • "รีสตาร์ท" ก็เลิกใช้งานเช่นกัน คุณสามารถใช้รีสตาร์ทภายใต้การปรับใช้ด้วยการดำเนินการเมื่อล้มเหลว
  • คุณสามารถใช้หนึ่งโหนดแบบสแตนด์อโลน "swarm" การปรับปรุงส่วนใหญ่ของ v3 (ถ้าไม่ใช่ทั้งหมด) มีไว้สำหรับการจับกลุ่ม

หมายเหตุ: เครือข่ายในโหมด Swarm จะไม่เชื่อมโยง หากคุณต้องการเชื่อมต่อภายในเท่านั้นคุณต้องเชื่อมต่อกับเครือข่าย คุณสามารถ 1) ระบุเครือข่ายภายนอกภายในไฟล์เขียนอื่น ๆ หรือต้องสร้างเครือข่ายด้วยพารามิเตอร์ --attachable (เครือข่ายนักเทียบท่าสร้าง -d โอเวอร์เลย์ My-Network - เชื่อมต่อได้) มิฉะนั้นคุณจะต้องเผยแพร่พอร์ตดังนี้:

ports:
  - 80:80

6
1. ฉันสามารถสร้างภาพโดยใช้เวอร์ชัน 3 <br/> 2. ดูเหมือนว่าแนวทางสำหรับ v3 จะแตกต่างจาก v2 โดยสิ้นเชิงไม่เหมือนกับการอัปเกรด <br/> 3. การปรับใช้ดูเหมือนว่าจะใช้ได้เฉพาะในโหมดฝูง ฉันได้รับคำเตือน - <br/> "คำเตือน: บริการบางอย่าง (โหนด) ใช้คีย์" ปรับใช้ "ซึ่งจะถูกละเว้นการเขียนไม่รองรับการกำหนดค่าการปรับใช้ - ใช้docker stack deployเพื่อปรับใช้กับฝูง"
vivekyad4v

23
@ viveky4d4v เนื่องจากสถานะเอกสารรูปแบบการเขียน v3 deployจะถูกละเว้นหากคุณไม่ได้ใช้ Swarm ไม่มีเหตุผลที่จะใช้รูปแบบ v3 เว้นแต่คุณจะใช้ Swarm
Dan Lowe

2
หากเริ่มการปรับใช้ใหม่ฉันจะเริ่มต้นด้วย v3 แม้ว่าฉันจะมีโฮสต์เพียงคนเดียวก็ตาม ดังนั้นคุณจึงมีความเป็นไปได้ที่จะปรับขนาดในภายหลังและเป็นเวลาเดียวกันที่คุณจะต้องใช้เมื่อคุณเข้าใจแนวคิดแล้ว
Berndinox

1
สวัสดี @ คอนเนอร์เมื่อฉันแก้ไขคำตอบทั้งหมดที่ฉันทำก็ถูกต้องลิงก์ที่ใช้งานไม่ได้ เช่นเดียวกับคุณฉันไม่สามารถถอดรหัสความหมายที่นี่ "ภายในเท่านั้น" ได้
Jay Taylor

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 ) ขอบคุณมาก.
Ryan

49

เทียบท่าเขียนไม่สนับสนุนdeployสำคัญ จะได้รับการยอมรับเมื่อคุณใช้ไฟล์ YAML เวอร์ชัน 3 ของคุณใน Docker Stack เท่านั้น

ข้อความนี้จะพิมพ์ออกมาเมื่อคุณเพิ่มdeployคีย์ลงในdocker-compose.ymlไฟล์ของคุณแล้วเรียกใช้docker-compose up -d

คำเตือน: บริการบางอย่าง (ฐานข้อมูล) ใช้คีย์ 'ปรับใช้' ซึ่งจะถูกละเว้น การเขียนไม่รองรับการกำหนดค่า "ปรับใช้" - ใช้docker stack deployเพื่อปรับใช้กับฝูง

เอกสารประกอบ ( https://docs.docker.com/compose/compose-file/#deploy ) ระบุว่า:

ระบุการกำหนดค่าที่เกี่ยวข้องกับการปรับใช้และการเรียกใช้บริการ สิ่งนี้จะมีผลเฉพาะเมื่อปรับใช้กับฝูงที่มีการปรับใช้ Docker stack และจะถูกละเว้นโดยการรัน docker-compose และ docker-compose run


2
โดยเฉพาะเอกสารบอกว่าหากคุณต้องการทำสิ่งนี้ให้ใช้ v2 หรือปรับใช้เพื่อจับกลุ่ม
ic_fl2
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.