วิธีดูเอาต์พุตบันทึกโดยใช้การเรียกใช้นักเทียบท่า


96

เมื่อฉันใช้docker-compose upฉันสามารถดูบันทึกของคอนเทนเนอร์ทั้งหมดในไฟล์docker-compose.ymlไฟล์

อย่างไรก็ตามเมื่อฉันใช้docker-compose run appฉันเห็นเฉพาะเอาต์พุตคอนโซลสำหรับappแต่ไม่มีบริการใดที่appขึ้นอยู่กับ จะดูเอาต์พุตบันทึกสำหรับบริการอื่น ๆ ได้อย่างไร


4
คุณสามารถใช้docker-compose logs -f service_name
Xiongbing Jin

โปรดทราบว่าdocker-compose runจะสร้างคอนเทนเนอร์ใหม่ทุกครั้งที่คุณดำเนินการ
jazgot

ฉันทำงานdocker-compose runใน circleci เพียงเพื่อเรียกใช้การทดสอบของฉันดังนั้นมันก็โอเคถ้าสร้างคอนเทนเนอร์ใหม่ ปัญหาหลักคือไม่เห็นผลลัพธ์ของบันทึกจากบริการที่ต้องพึ่งพา
sthomps

คำตอบ:


135

อัปเดต 1 กรกฎาคม 2019

docker-compose logs <name-of-service>

จากเอกสารประกอบ :

การใช้งาน: บันทึก [ตัวเลือก] [SERVICE ... ]

ตัวเลือก:

- ไม่มีสีผลิตเอาต์พุตขาวดำ

-f, --follow ติดตามเอาต์พุตบันทึก

-t, - การประทับเวลาแสดงการประทับเวลา

--tail = "all" จำนวนบรรทัดที่จะแสดงจากส่วนท้ายของบันทึกสำหรับแต่ละคอนเทนเนอร์

ดูบันทึกนักเทียบท่า

คุณสามารถเริ่มการเขียน Docker ในโหมดแยกและแนบตัวเองเข้ากับบันทึกของคอนเทนเนอร์ทั้งหมดในภายหลัง หากคุณดูบันทึกเสร็จแล้วคุณสามารถแยกตัวเองออกจากเอาต์พุตบันทึกได้โดยไม่ต้องปิดบริการของคุณ

  1. ใช้docker-compose up -dเพื่อเริ่มบริการทั้งหมดในโหมดแยก ( -d) (คุณจะไม่เห็นบันทึกใด ๆ ในโหมดแยกออก)
  2. ใช้docker-compose logs -f -tเพื่อแนบตัวเองเข้ากับบันทึกของบริการที่ทำงานอยู่ทั้งหมดในขณะที่-fคุณทำตามเอาต์พุตบันทึกและ-tตัวเลือกจะให้การประทับเวลา (ดูข้อมูลอ้างอิงของ Docker )
  3. การใช้Ctrl + zหรือCtrl + cการแยกตัวเองจากการล็อกเอาท์พุทโดยไม่ต้องปิดภาชนะบรรจุที่ทำงานของคุณ

หากคุณสนใจบันทึกของคอนเทนเนอร์เดียวคุณสามารถใช้dockerคีย์เวิร์ดแทน:

  1. ใช้ docker logs -t -f <name-of-service>

บันทึกผลลัพธ์

ในการบันทึกผลลัพธ์ลงในไฟล์คุณเพิ่มสิ่งต่อไปนี้ในคำสั่ง logs ของคุณ:

  1. docker-compose logs -f -t >> myDockerCompose.log

7
ฉันไม่รู้ว่าทำไมถึงเป็นคำตอบที่ได้รับการยอมรับ คำถามเกี่ยวกับการรัน docker-compose และหลายครั้งที่คุณรันด้วย -rm ดังนั้นจึงไม่มีบันทึก ฉันต้องการดูผลลัพธ์ของเชลล์สคริปต์ขณะที่ฉันกำลังเรียกใช้
James O'Brien

2
แม้ว่านี่จะเป็นข้อมูลที่เป็นประโยชน์ แต่ก็ไม่ใช่คำตอบสำหรับคำถามนี้ ดังที่ @JamesO'Brien กล่าวว่าคำถามเกี่ยวกับdocker-compose runบริการเหล่านั้นซึ่งมีชื่อเฉพาะจากบริการที่ระบุไว้ในdocker.compose.yml
TetraDev

20

หากคุณต้องการดูบันทึกผลลัพธ์จากบริการทั้งหมดในเทอร์มินัลของคุณ

docker-compose logs -t -f --tail <no of lines> 

เช่น: สมมติว่าคุณต้องการบันทึกผลลัพธ์ของ 5 บรรทัดสุดท้ายจากบริการทั้งหมด

docker-compose logs -t -f --tail 5

หากคุณต้องการบันทึกผลลัพธ์จากบริการเฉพาะสามารถทำได้ดังนี้:

docker-compose logs -t -f --tail <no of lines> <name-of-service1> <name-of-service2> ... <name-of-service N>

การใช้งาน:

เช่น. สมมติว่าคุณมีบริการ API และพอร์ทัลคุณสามารถทำสิ่งต่อไปนี้:

docker-compose logs -t -f --tail 5 portal api

โดยที่ 5 แทน 5 บรรทัดสุดท้ายจากทั้งสองบันทึก

อ้างอิง: https://docs.docker.com/v17.09/engine/admin/logging/view_container_logs/


5
  1. ใช้คำสั่งเพื่อเริ่มคอนเทนเนอร์ในโหมดแยก: docker-compose up -d
  2. ในการดูคอนเทนเนอร์ใช้: docker ps
  3. เพื่อดูบันทึกของคอนเทนเนอร์: docker logs <containerid>

1

น่าเสียดายที่เราจำเป็นต้องdocker-compose logsแยกจากdocker-compose run. เพื่อให้สิ่งนี้ทำงานได้อย่างน่าเชื่อถือเราจำเป็นต้องระงับdocker-compose runสถานะการออกจากนั้นเปลี่ยนเส้นทางบันทึกและออกด้วยสถานะที่ถูกต้อง

#!/bin/bash
set -euo pipefail
docker-compose run app | tee app.log || failed=yes
docker-compose logs --no-color > docker-compose.log
[[ -z "${failed:-}" ]] || exit 1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.