Como visualizar a saída do log usando docker-compose run?

99

Quando eu uso docker-compose up, posso ver os logs de todos os contêineres em meu docker-compose.ymlarquivo.

No entanto, quando eu uso, docker-compose run appvejo apenas a saída do console, appmas nenhum dos serviços dos quais appdepende. Como posso ver a saída do log para os outros serviços?

sthomps
fonte
4
Você pode usardocker-compose logs -f service_name
Xiongbing Jin
Observe também que docker-compose runcria um novo contêiner cada vez que você o executa.
jazgot
Estou executando docker-compose runno circleci apenas para executar meus testes, então está tudo bem se ele criar um novo contêiner. O principal problema é simplesmente não ver a saída do log dos serviços dependentes.
sthomps

Respostas:

142

Atualização 1 de julho de 2019

docker-compose logs <name-of-service>

Da documentação :

Uso: logs [opções] [SERVIÇO ...]

Opções:

--no-color Produz saída monocromática.

-f, --follow Siga a saída do log.

-t, --timestamps Mostra os carimbos de data / hora.

--tail = "all" Número de linhas a serem mostradas a partir do final dos logs para cada contêiner.

Ver registros do docker

Você pode iniciar o Docker compose no modo desanexado e anexar-se aos logs de todos os contêineres posteriormente. Se você terminar de assistir os logs, poderá se desconectar da saída de logs sem encerrar seus serviços.

  1. Use docker-compose up -dpara iniciar todos os serviços no modo desanexado ( -d) (você não verá nenhum registro no modo desanexado)
  2. Use docker-compose logs -f -tpara se anexar aos registros de todos os serviços em execução , ao passo que -fsignifica que você segue a saída do registro e a -topção fornece carimbos de data / hora (consulte a referência do Docker )
  3. Use Ctrl + zou Ctrl + cpara separar- se da saída de registro sem desligar seus contêineres em execução

Se estiver interessado em logs de um único contêiner, você pode usar a dockerpalavra - chave em seu lugar:

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

Salve a saída

Para salvar a saída em um arquivo, adicione o seguinte ao comando logs:

  1. docker-compose logs -f -t >> myDockerCompose.log
Bruno Bieri
fonte
8
Não sei por que essa resposta é aceita. A pergunta era sobre a execução do docker-compose e muitas vezes você executa isso com -rm, então não há registros. Gostaria de ver a saída do script de shell enquanto o estou executando.
James O'Brien
2
Embora sejam informações úteis, NÃO são uma resposta à pergunta. Como @ JamesO'Brien disse, a questão é sobre docker-compose rune anexar a esses serviços, que têm nomes exclusivos dos serviços listados emdocker.compose.yml
TetraDev
23

Se você quiser ver os registros de saída de todos os serviços em seu terminal.

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

Ex .: digamos que você gostaria de registrar a saída das últimas 5 linhas de todos os serviços

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

Se você deseja registrar a saída de serviços específicos , pode fazer o seguinte:

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

Uso:

Por exemplo. digamos que você tenha API e serviços de portal, então você pode fazer algo como abaixo:

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

Onde 5 representa as últimas 5 linhas de ambos os logs.

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

Invencível
fonte
5
  1. use o comando para iniciar os contêineres no modo desanexado: docker-compose up -d
  2. para visualizar os contêineres, use: docker ps
  3. para ver os registros de um contêiner: docker logs <containerid>
akshaya pandey
fonte
1

Infelizmente, precisamos executar docker-compose logsseparadamente docker-compose run. Para que isso funcione de maneira confiável, precisamos suprimir o docker-compose runstatus de saída e, em seguida, redirecionar o log e sair com o status correto.

#!/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
fonte