ฉันควรใช้ Docker-compose up หรือ run?


129

มีเหตุผลที่จะใช้runในการเริ่มต้นdocker-compose.ymlไฟล์หรือคุณควรใช้up?

ฉันเข้าใจว่าrunสามารถเริ่มคอนเทนเนอร์เฉพาะได้ แต่ฉันหมายถึงกรณีที่คุณใช้โดยไม่ได้ระบุคอนเทนเนอร์เพื่อให้เริ่มต้นคอนเทนเนอร์ yml ทั้งหมดของคุณ

คำตอบ:


141

ดังที่กล่าวไว้ในdocker-compose run(2558)

คำสั่งผ่านไปได้โดยการทำงานแทนที่คำสั่งที่กำหนดไว้ในการกำหนดค่าบริการ
ตัวอย่างเช่นถ้ากำหนดค่าบริการเว็บเริ่มต้นด้วยbashแล้วแทนที่มันด้วยdocker-compose run web python app.pypython app.py

ความแตกต่างที่สองคือdocker-compose runคำสั่งไม่สร้างใด ๆ ของพอร์ตที่ระบุไว้ในการกำหนดค่าบริการ
วิธีนี้ป้องกันไม่ให้พอร์ตชนกันกับพอร์ตที่เปิดอยู่แล้ว หากคุณต้องการให้พอร์ตของบริการสร้างและแมปกับโฮสต์ให้ระบุแฟล็ก --service-ports:

$ docker-compose run --service-ports web python manage.py shell

ดังนั้นเว้นแต่คุณจะมีความต้องการเฉพาะเหล่านั้น (การแทนที่คำสั่งหรือเรียกใช้เพียงคอนเทนเนอร์เดียวบนพอร์ตต่างๆ) docker-compose up(แม้แต่คอนเทนเนอร์เดียว) ก็เพียงพอแล้ว

คุณช่วยอธิบายได้ไหมว่าทำไมหรือเมื่อใดที่คุณไม่ต้องการให้สร้างพอร์ต นั่นคือเหตุผลหรือเมื่อพวกเขาอาจขัดแย้งกับพอร์ตที่เปิดอยู่แล้ว

เพียงเพราะdocker-compose runทำขึ้นเพื่อเรียกใช้คำสั่งครั้งเดียวสำหรับบริการของคุณ
นั่นหมายความว่าถ้าคุณทำ a ไปdocker-compose upแล้วคอนเทนเนอร์ทั้งหมดของคุณกำลังทำงานบนพอร์ตที่ระบุจากdocker-compose.yml.
การทำdocker-compose runในขั้นตอนนี้ (เพื่อดำเนินการคำสั่ง one-off) หากเป็นไปตามพอร์ตเดียวกันจะล้มเหลวทันที ดังนั้นค่าเริ่มต้นที่ไม่สร้างพอร์ตเหล่านั้น


กรณีการใช้งานอื่น (ในการอ้างอิงตัวแปรสภาพแวดล้อมการเขียน ):

docker-compose run SERVICE envหากต้องการดูว่าตัวแปรสภาพแวดล้อมที่มีอยู่ให้บริการวิ่ง


เวอร์ชันล่าสุด (2019+) ของคำสั่งเหล่านั้นเปิดอยู่docker/docker.github.io:


27

ฉันต้องการชี้ให้เห็นว่าหากคุณใช้ Python กับดีบักเกอร์ pdb:

import pdb; pdb.set_trace()

มันจะไม่หล่นไปที่เชลล์หากคุณรันสคริปต์ของคุณโดยใช้:

docker-compose up

อย่างไรก็ตามหากคุณใช้ run มันจะเลื่อนลงไปที่ดีบักเกอร์ตามที่คาดไว้:

docker-compose run

7

มีคำตอบจากเป็นเอกสารนักเทียบท่า

docker-compose upโดยปกติแล้วคุณต้องการ ใช้upเพื่อเริ่มหรือรีสตาร์ทบริการทั้งหมดที่กำหนดไว้ในไฟล์docker-compose.yml. ในโหมด "แนบ" เริ่มต้นคุณจะเห็นบันทึกทั้งหมดจากคอนเทนเนอร์ทั้งหมด ในโหมด "แยกออก" ( -d) เขียนจะออกหลังจากเริ่มคอนเทนเนอร์ แต่คอนเทนเนอร์จะยังคงทำงานอยู่เบื้องหลัง

docker-compose runคำสั่งสำหรับการทำงาน“one-off” หรือ“เฉพาะกิจ” งาน ต้องใช้ชื่อบริการที่คุณต้องการเรียกใช้และเริ่มต้นคอนเทนเนอร์สำหรับบริการที่บริการที่ทำงานอยู่เท่านั้น ใช้run เพื่อรันการทดสอบหรือดำเนินงานด้านการดูแลระบบเช่นการลบหรือเพิ่มข้อมูลลงในคอนเทนเนอร์ไดรฟ์ข้อมูล runคำสั่งทำหน้าที่เหมือน docker run -tiในการที่จะเปิดสถานีโต้ตอบกับภาชนะบรรจุและส่งกลับออกจากสถานะการจับคู่ออกจากสถานะของกระบวนการในภาชนะที่


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