Apache no Docker: como faço para "access.log"?


17

Estou começando a usar o Docker e o richt agora, tentando descobrir como configurar meu primeiro ambiente Apache 2 / PHP dockerizado. Até agora, eu estava usando VMs Linux completas, onde eu usava arquivos de log sendo gravados em / var / log / apache2, depois utilizava "logrotate" para saltar para um novo arquivo todos os dias.

Os arquivos de log foram usados ​​principalmente para detecção imediata de erros (ou seja, faça logon no servidor e use menos para abrir os arquivos access.log e error.log atuais) e para fail2ban.

Se estou certo, isso não é praticável em um ambiente Docker - principalmente porque você geralmente não pode fazer login nos contêineres para ver os logs. Também os logs serão perdidos se o contêiner for removido.

Então: qual é o método mais comum para trabalhar com / emular / substituir access.log / error.log nessa situação? Quais são as soluções comuns para os ambientes de produção e desenvolvimento?

Minhas idéias até agora incluem o uso de um compartilhamento NFS (lento e pode causar colisões de nome de arquivo se não for cuidadoso) e logstash (não tenho certeza se vale a pena o esforço e praticável para sites menores ou mesmo ambientes de desenvolvimento?), Mas tenho certeza de que pessoas inteligentes surgiu com melhores soluções?

Não tenho certeza se isso faz diferença, mas atualmente estou baseando minha imagem do Docker no php: 5.6-apache .

Respostas:


13

Você ainda pode usar o docker exec -it <your container name> /bin/bashcomando para entrar no seu contêiner e fazer seu trabalho regular. Ou talvez você possa mudar /bin/bashpara o seu comando ou script .shdo seu comando para executá-lo.

Para tirar seu arquivo do contêiner, use docker cp <container name:/path/to/file> </your local machine/path/>

E para o seu trabalho diário, você pode usar cronpara agendar esses comandos. Recomendo vivamente que você aliasse seus comandos freqüentes do docker. Para que eu possa usar o docker felizmente com algumas teclas.

O docker logs <container name/id>comando é para visualizar o log da execução da imagem da janela de encaixe. Ele mostra a saída de redirecionamento para o stdout.


Além disso, docker attach <container name>é a boa maneira de ver o stdout do seu contêiner. Mas lembre-se de que, se você pressionar ctrl + d ou ctrl + c, TERMINARÁ (sigkill) sua tarefa em andamento. Então você precisa desanexá-lo adequadamente usando a tecla Escape ctrl+p+q. Se você deseja apenas fazer shell no seu contêiner, prefiro usar o execcomando acima.
Fony Lew


1

Até agora, encontrei " logs do docker " sendo mencionados várias vezes.

Sou um novato absoluto no Docker, de modo que possa conter a solução para o meu problema - mas até agora não entendi completamente o conceito por trás desse comando.

O Docker parece manter toda a saída stdout nos arquivos JSON em / var / lib / docker / containers / e me dá a chance de acessá-los através do comando logs.

Até agora, não tenho certeza de como realmente usar a saída.


1

Talvez esse recurso não existisse quando a pergunta foi feita, mas com o argumento -v da execução, você pode montar um diretório no host em um diretório no contêiner.

docker run -v [host_dir]:[container_dir]

Dessa forma, os arquivos de log (ou outros) sobreviverão quando o contêiner for excluído e você poderá acessar os arquivos como se o apache estivesse instalado no host e não em um contêiner.

Como alternativa, você pode, de alguma forma, enviar arquivos de log modificados para um local central. A pilha Kibana usa a batida de arquivo para conseguir isso, mas deve ser possível executá-la de forma independente se você não se importa com o restante da pilha.


1
O Docker havia montado volumes de encadernação há três anos.
womble

0
root@my_docker:~ # ls -l /var/log/apache2/
total 0
lrwxrwxrwx 1 root root 11 Jul 17 04:55 access.log -> /dev/stdout
lrwxrwxrwx 1 root root 11 Jul 17 04:55 error.log -> /dev/stderr
lrwxrwxrwx 1 root root 11 Jul 17 04:55 other_vhosts_access.log -> /dev/stdout
root@my_docker:~ #

a imagem do docker que escolhi apenas vinculou todos os arquivos * .log em / dev / stdout e / dev / stderr, para que eu não os pudesse ler.

depois de remover os arquivos e reiniciar o apache, posso obter os logs em / var / log / na janela de encaixe.

docker-compose exec apache bash -c "tail -f /var/log/apache2/*.log"

0

No arquivo de configuração do apache, você pode adicionar:
CustomLog / dev / stdout
ErrorLog / dev / stderr

e para ver os logs, use o comando abaixo:
docker logs container_id

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.