Não há necessidade de redirecionar os logs.
Por padrão, o Docker armazena logs em um arquivo de log. Para verificar o caminho do arquivo de log, execute o comando:
docker inspect --format='{{.LogPath}}' containername
/var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log
Abra esse arquivo de log e analise.
se você redirecionar os logs, só obterá os logs antes do redirecionamento. você não poderá ver os logs ao vivo.
EDITAR:
Para ver os registros ao vivo, você pode executar o comando abaixo
tail -f `docker inspect --format='{{.LogPath}}' containername`
Nota:
Este arquivo de log /var/lib/docker/containers/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334/f844a7b45ca5a9589ffaa1a5bd8dea0f4e79f0e2ff639c1d010d96afb4b53334-json.log
será criado apenas se o docker gerar logs, se não houver logs, esse arquivo não estará lá. é semelhante como em algum momento se executarmos o comando docker logs containername
e ele não retornar nada. Nesse cenário, este arquivo não estará disponível.
tail -f `docker inspect --format='{{.LogPath}}' myapp`
- é realmente JSONQue tal esta opção:
docker logs containername >& logs/myFile.log
Ele não redirecionará os logs que foram solicitados na pergunta, mas os copiará uma vez para um arquivo específico.
fonte
docker logs --help
para ter certezadocker logs -f <yourContainer> &> your.log &
Explicação:
-f
(ou seja--follow
): grava todos os logs existentes e continua ( segue ) registrando tudo o que vem a seguir.&>
redireciona a saída padrão e o erro padrão.&
.> output.log 2> error.log
(em vez de usar&>
).fonte
Para capturar stdout e stderr de seu contêiner do docker em um único arquivo de log, execute o seguinte:
fonte
Supondo que você tenha vários contêineres e queira agregar os logs em um único arquivo, você precisa usar algum agregador de log como fluentd. fluentd é compatível como driver de registro para contêineres docker.
Portanto, em docker-compose, você precisa definir o driver de registro
A segunda etapa seria atualizar o fluentd conf para fornecer os logs para o serviço 1 e o serviço 2
Nesta configuração, estamos pedindo que os logs sejam gravados em um único arquivo para este caminho
/fluentd/log/service/service.*.log
e a terceira etapa seria executar o fluentd personalizado, que começará a gravar os logs no arquivo.
Aqui está o link para instruções passo a passo
Um pouco longo, mas da maneira correta, já que você obtém mais controle sobre o caminho dos arquivos de log, etc., e funciona bem no Docker Swarm também.
fonte
Como o Docker mescla stdout e stderr para nós, podemos tratar a saída do log como qualquer outro fluxo de shell. Para redirecionar os registros atuais para um arquivo, use um operador de redirecionamento
$ docker logs test_container > output.log
docker logs -f test_container > output.log
Em vez de enviar a saída para stderr e stdout, redirecione a saída de seu aplicativo para um arquivo e mapeie o arquivo para armazenamento permanente fora do contêiner.
$ docker logs test_container> /tmp/output.log
O Docker não aceitará caminhos relativos na linha de comando, portanto, se quiser usar um diretório diferente, você precisará usar o caminho completo.
fonte
Se você trabalha no Windows e usa o PowerShell (como eu), pode usar a seguinte linha para capturar o
stdout
estderr
:Eu espero que isso ajude alguém!
fonte
foreach ($element in $(docker ps -a --format "{{.Names}}")) {docker logs $element | Out-File "C:/dockerlogs/$element.log"}
A maneira mais fácil de usar é este comando no terminal:
estrutura é:
fonte
Primeiro verifique o ID do seu contêiner
Você pode ver a primeira linha nas colunas CONTAINER ID. Provavelmente se parece com "3fd0bfce2806" e digite-o no shell
Você verá algo assim
então você pode ver como
Seria no formato JSON, você pode usar o carimbo de data / hora para rastrear erros
fonte
Script Bash para copiar todos os registros do contêiner para um diretório especificado:
fonte