Stdout Buffering em contêineres Docker: um caso de Debian vs. Ubuntu
Ao executar código em um contêiner Docker, o buffer stdout pode ocorrer em alguns casos, mas não em outros. Esse problema é observado em um cenário em que o stdout é direcionado ao console e a um arquivo de log usando um io.MultiWriter.
Causa raiz: diferenças de plataforma
A raiz a causa desse comportamento está nas diferenças de plataforma entre imagens baseadas em Debian e imagens baseadas em Ubuntu. O Debian parece armazenar em buffer o stdout por padrão, enquanto o Ubuntu lida com o stdout de forma síncrona.
Demonstração com Dockerfiles
Isso pode ser ilustrado usando dois Dockerfiles, um baseado no Debian:wheezy e o outro no Ubuntu:trusty:
# TRUSTY Dockerfile FROM ubuntu:trusty # ... (rest of the Dockerfile as provided in the problem description) # WHEEZY Dockerfile FROM debian:wheezy # ... (rest of the Dockerfile as provided in the problem description)
Executar procwrap no contêiner com base na imagem wheeze resulta em stdout em buffer, enquanto executá-lo no contêiner com base na imagem confiável resulta em saída padrão síncrona. No entanto, executar procwrap em uma VM Debian sem Docker não exibe buffer stdout.
Opções de resolução
Para resolver esse problema, várias abordagens podem ser consideradas:
Em última análise, , a melhor solução depende da aplicação específica e do ambiente operacional.
Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.
Copyright© 2022 湘ICP备2022001581号-3