มีเหตุผลที่จะใช้run
ในการเริ่มต้นdocker-compose.yml
ไฟล์หรือคุณควรใช้up
?
ฉันเข้าใจว่าrun
สามารถเริ่มคอนเทนเนอร์เฉพาะได้ แต่ฉันหมายถึงกรณีที่คุณใช้โดยไม่ได้ระบุคอนเทนเนอร์เพื่อให้เริ่มต้นคอนเทนเนอร์ yml ทั้งหมดของคุณ
มีเหตุผลที่จะใช้run
ในการเริ่มต้นdocker-compose.yml
ไฟล์หรือคุณควรใช้up
?
ฉันเข้าใจว่าrun
สามารถเริ่มคอนเทนเนอร์เฉพาะได้ แต่ฉันหมายถึงกรณีที่คุณใช้โดยไม่ได้ระบุคอนเทนเนอร์เพื่อให้เริ่มต้นคอนเทนเนอร์ yml ทั้งหมดของคุณ
คำตอบ:
ดังที่กล่าวไว้ในdocker-compose run
(2558)
คำสั่งผ่านไปได้โดยการทำงานแทนที่คำสั่งที่กำหนดไว้ในการกำหนดค่าบริการ
ตัวอย่างเช่นถ้ากำหนดค่าบริการเว็บเริ่มต้นด้วยbash
แล้วแทนที่มันด้วยdocker-compose run web python app.py
python 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
:
ฉันต้องการชี้ให้เห็นว่าหากคุณใช้ Python กับดีบักเกอร์ pdb:
import pdb; pdb.set_trace()
มันจะไม่หล่นไปที่เชลล์หากคุณรันสคริปต์ของคุณโดยใช้:
docker-compose up
อย่างไรก็ตามหากคุณใช้ run มันจะเลื่อนลงไปที่ดีบักเกอร์ตามที่คาดไว้:
docker-compose run
มีคำตอบจากเป็นเอกสารนักเทียบท่า
docker-compose up
โดยปกติแล้วคุณต้องการ ใช้up
เพื่อเริ่มหรือรีสตาร์ทบริการทั้งหมดที่กำหนดไว้ในไฟล์docker-compose.yml
. ในโหมด "แนบ" เริ่มต้นคุณจะเห็นบันทึกทั้งหมดจากคอนเทนเนอร์ทั้งหมด ในโหมด "แยกออก" (-d
) เขียนจะออกหลังจากเริ่มคอนเทนเนอร์ แต่คอนเทนเนอร์จะยังคงทำงานอยู่เบื้องหลัง
docker-compose run
คำสั่งสำหรับการทำงาน“one-off” หรือ“เฉพาะกิจ” งาน ต้องใช้ชื่อบริการที่คุณต้องการเรียกใช้และเริ่มต้นคอนเทนเนอร์สำหรับบริการที่บริการที่ทำงานอยู่เท่านั้น ใช้run
เพื่อรันการทดสอบหรือดำเนินงานด้านการดูแลระบบเช่นการลบหรือเพิ่มข้อมูลลงในคอนเทนเนอร์ไดรฟ์ข้อมูลrun
คำสั่งทำหน้าที่เหมือนdocker run -ti
ในการที่จะเปิดสถานีโต้ตอบกับภาชนะบรรจุและส่งกลับออกจากสถานะการจับคู่ออกจากสถานะของกระบวนการในภาชนะที่
docker-compose run
เพื่อดำเนินการคำสั่งกับบริการที่กำลังทำงานอยู่และdocker-compose up
เพื่อสร้างบริการใหม่