Як переглянути вихідні дані журналу за допомогою запуску docker-compose?


96

Коли я використовую, docker-compose upя бачу журнали для всіх контейнерів у своєму docker-compose.ymlфайлі.

Однак, коли я використовую, docker-compose run appя бачу лише вивід консолі для, appале жодної із служб, що не appзалежить. Як можна побачити вихідні дані журналу для інших служб?


4
Можна використовуватиdocker-compose logs -f service_name
Сюнбін Джин

Також зверніть увагу, що docker-compose runкожен контейнер створюється при кожному його запуску.
джазгот

Я запускаю docker-compose runв Circi просто для запуску моїх тестів, так що нічого страшного, якщо він створює новий контейнер. Основною проблемою є просто відсутність журналу виводу із залежних служб.
sthomps

Відповіді:


135

Оновлення 1 липня 2019 року

docker-compose logs <name-of-service>

З документації :

Використання: журнали [параметри] [СЕРВІС ...]

Варіанти:

--нокольоровий Випуск монохромного виводу.

-f, --follow Слідувати журналу.

-t, --timestamps Показати мітки часу.

--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>

Збережіть вихідні дані

Щоб зберегти вихідні дані у файл, ви додаєте в свою команду журналів таке:

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

7
Не знаю, чому це прийнята відповідь. Питання було про запуск docker-compose, і багато разів ви запускаєте це за допомогою -rm, щоб не було журналів. Я хотів би бачити вихід скрипта оболонки, коли я його запускаю.
Джеймс О'Брайен

2
Хоча це корисна інформація, це НЕ відповідь на запитання. Як сказав @ JamesO'Brien, питання полягає в тому, docker-compose runщо стосується тих служб, які мають унікальні назви від служб, перелічених уdocker.compose.yml
TetraDev

21

Якщо ви хочете переглянути журнали виводу з усіх служб у вашому терміналі.

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.