Bagaimana cara melihat output log menggunakan run docker-compose?

96

Saat saya menggunakan, docker-compose upsaya dapat melihat log untuk semua container di docker-compose.ymlfile saya .

Namun, ketika saya menggunakan, docker-compose run appsaya hanya melihat output konsol apptetapi tidak ada layanan yang appbergantung padanya. Bagaimana melihat keluaran log untuk layanan lain?

sthomps
sumber
4
Anda dapat menggunakandocker-compose logs -f service_name
Xiongbing Jin
Perhatikan juga bahwa docker-compose runmembuat penampung baru setiap kali Anda menjalankannya.
jazgot
Saya berjalan docker-compose rundi circleci hanya untuk menjalankan pengujian saya jadi tidak masalah jika itu membuat wadah baru. Masalah utamanya adalah tidak melihat keluaran log dari layanan yang bergantung.
sthomps

Jawaban:

135

Perbarui 1 Juli 2019

docker-compose logs <name-of-service>

Dari dokumentasi :

Penggunaan: log [opsi] [SERVICE ...]

Pilihan:

--tidak berwarna Menghasilkan keluaran monokrom.

-f, --follow Ikuti keluaran log.

-t, --timestamps Tampilkan cap waktu.

--tail = "all" Jumlah baris yang akan ditampilkan dari akhir log untuk setiap container.

Lihat log buruh pelabuhan

Anda dapat memulai penulisan Docker dalam mode terpisah dan melampirkan diri Anda ke log dari semua container nanti. Jika Anda sudah selesai menonton log, Anda dapat melepaskan diri Anda dari keluaran log tanpa mematikan layanan Anda.

  1. Gunakan docker-compose up -duntuk memulai semua layanan dalam mode terpisah ( -d) (Anda tidak akan melihat log apa pun dalam mode terpisah)
  2. Gunakan docker-compose logs -f -tuntuk melampirkan diri Anda ke log dari semua layanan yang berjalan , sedangkan -fberarti Anda mengikuti output log dan -topsi memberi Anda stempel waktu (Lihat referensi Docker )
  3. Gunakan Ctrl + zatau Ctrl + cuntuk melepaskan diri Anda dari keluaran log tanpa mematikan container Anda yang sedang berjalan

Jika Anda tertarik dengan log dari satu penampung, Anda dapat menggunakan dockerkata kunci sebagai gantinya:

  1. Menggunakan docker logs -t -f <name-of-service>

Simpan hasilnya

Untuk menyimpan output ke file, Anda menambahkan perintah berikut ke log Anda:

  1. docker-compose logs -f -t >> myDockerCompose.log
Bruno Bieri
sumber
7
Saya tidak tahu mengapa ini adalah jawaban yang diterima. Pertanyaannya adalah tentang menjalankan docker-compose dan sering kali Anda menjalankannya dengan -rm sehingga tidak ada log. Saya ingin melihat keluaran dari skrip shell saat saya menjalankannya.
James O'Brien
2
Meskipun ini adalah info yang berguna, ini BUKAN jawaban untuk pertanyaan tersebut. Seperti yang dikatakan @ JamesO'Brien, pertanyaannya adalah tentang docker-compose rundan melekat pada layanan tersebut, yang memiliki nama unik dari layanan yang terdaftar didocker.compose.yml
TetraDev
21

Jika Anda ingin melihat log keluaran dari semua layanan di terminal Anda.

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

Misalnya: Katakanlah Anda ingin mencatat keluaran dari 5 baris terakhir dari semua layanan

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

Jika Anda ingin mencatat keluaran dari layanan tertentu maka itu dapat dilakukan seperti di bawah ini:

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

Pemakaian:

Misalnya. katakanlah Anda memiliki API dan layanan portal maka Anda dapat melakukan sesuatu seperti di bawah ini:

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

Dimana 5 mewakili 5 baris terakhir dari kedua log.

Ref: https://docs.docker.com/v17.09/engine/admin/logging/view_container_logs/

Tak terkalahkan
sumber
5
  1. gunakan perintah untuk memulai kontainer dalam mode terpisah: docker-compose up -d
  2. untuk melihat penggunaan wadah: docker ps
  3. untuk melihat log wadah: docker logs <containerid>
akshaya pandey
sumber
1

Sayangnya kami harus menjalankannya docker-compose logssecara terpisah dari docker-compose run. Agar ini bekerja dengan andal, kita perlu menekan docker-compose runstatus keluar lalu mengarahkan ulang log dan keluar dengan status yang benar.

#!/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
Nathan
sumber