Onde está um arquivo de log com logs de um contêiner?

116

Estou executando vários contêineres usando docker-compose. Posso ver os logs do aplicativo com o comando docker-compose logs. No entanto, gostaria de acessar o arquivo de log bruto para enviá-lo a algum lugar, por exemplo? Onde está localizado? Acho que é um registro separado para cada contêiner (dentro do contêiner?), Mas onde posso encontrá-lo?

user606521
fonte

Respostas:

190

Os registros de um contêiner podem ser encontrados em:

/var/lib/docker/containers/<container id>/<container id>-json.log

(se você usar o formato de registro padrão que é json)

Michael
fonte
3
Existem muitas pastas como 004279dd2985037950beeba7e6fe45c10354476d3b82afb68e72dd612b03a8ff. Como saber em qual pasta procurar um determinado contêiner?
Praveen Sripati
3
@PraveenSripati o id do contêiner para contêineres em execução é mostrado na primeira coluna se você fizer issodocker ps
CS,
1
@PraveenSripati write docker ps, você obterá todos os seus containers disponíveis junto com seus IDs. Copie o ID do contêiner desejado e, em seguida, /var/lib/docker/containers/execute-o ls | grep <paste the copied docker ID>. Então você verá aquele contêiner do docker
TheLebDev de
cd /var/lib/docker/containers/ -bash: cd: / var / lib / docker / containers /: Permissão negada sudo cd /var/lib/docker/containers/ sudo: cd: comando não encontrado
canbax
2
@Chris eu tive que fazer docker ps --no-truncpara ver a id inteira
Dan Z
97

Você pode docker inspectcada contêiner para ver onde seus registros estão:

docker inspect --format='{{.LogPath}}' $INSTANCE_ID

E, caso você esteja tentando descobrir onde as toras estavam para gerenciar seu tamanho coletivo ou ajustar os parâmetros da própria exploração, você encontrará o seguinte relevante.

Corrigindo a quantidade de espaço reservado para os logs

Isso é retirado de Solicitação para a capacidade de limpar o histórico de registro (problema 1083) ):

Docker 1.8 e docker-compose 1.4 já existe um método para limitar o tamanho do registro usando o driver docker compose log e log-opt max-size:

mycontainer:
  ...
  log_driver: "json-file"
  log_opt:
    # limit logs to 2MB (20 rotations of 100K each)
    max-size: "100k"
    max-file: "20"

Nos arquivos docker compose da versão '2', a sintaxe mudou um pouco:

version: '2'
...
mycontainer:
  ...
  logging:
    #limit logs to 200MB (4rotations of 50M each)
    driver: "json-file"
    options:
      max-size: "50m"
      max-file: "4"

(observe que em ambas as sintaxes, os números são expressos como strings, entre aspas)

Possível problema com o docker-compose logsnão encerramento

  • problema 1866 : o comando logsnão sai se o contêiner já estiver parado
VonC
fonte
1
A versão curta: docker inspect -f '{{.LogPath}}' $ INSTANCE_ID
Bienvenido David
12

Para ver quanto espaço cada registro do contêiner está ocupando, use isto:

docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs ls -hl

(você pode precisar de um sudoantes ls).

Aquele cara brasileiro
fonte
Eu recebo uma permissão negada.
Shakedk
1
Adicionar sudo no final ajudou: docker ps -qa | xargs docker inspect --format='{{.LogPath}}' | xargs sudo du -hl
Shakedk
2

Para visualizar diretamente o arquivo de log em less, eu uso:

docker inspect $1 | grep 'LogPath' | sed -n "s/^.*\(\/var.*\)\",$/\1/p" | xargs sudo less

executado como ./viewLogs.sh CONTAINERNAME

icyerasor
fonte
2

No Windows, o local padrão é: C:\ProgramData\Docker\containers\<container-id>-json.log.

pmohandas
fonte
Este é o único ao executar um contêiner local para desenvolvimento! obrigado - foi muito difícil encontrar essa informação
Percy
1

Em 22/08/2018, os logs podem ser encontrados em:

/data/docker/containers/<container id>/<container id>-json.log
Lixzhang
fonte
1
docker inspect <containername> | grep log
Vasili Pascal
fonte