Как просмотреть вывод журнала с помощью запуска docker-compose?

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>

Из документации :

Использование: журналы [параметры] [СЕРВИС ...]

Параметры:

--no-color Производить монохромный вывод.

-f, --follow Следить за выводом журнала.

-t, --timestamps Показать отметки времени.

--tail = "all" Количество строк, отображаемых с конца журналов для каждого контейнера.

См. Журналы докеров

Вы можете запустить Docker compose в автономном режиме и позже присоединиться к журналам всего контейнера . Если вы закончили просмотр журналов, вы можете отключиться от вывода журналов, не завершая работу служб.

  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, поэтому журналов не было. Я хотел бы видеть вывод сценария оболочки, когда я его запускаю.
Джеймс О'Брайен,
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
Натан
источник