Acessando utilitários do sistema a partir do docker

Acessando utilitários do sistema a partir do docker

Estou construindo um contêiner docker que deve mostrar informações sobre o status do sistema em uma página da web.

Eu tenho um contêiner PHP-fpm e NGINX em execução. Se eu usar shell_execou execo script .sh que fiz for encontrado e executado.

No entanto, ele não exibe a saída de hddtempe (lm-)sensors. Provavelmente porque estes não existem no contêiner PHP.

Qual seria a maneira correta de corrigir isso?

  • Meu colega afirmou que no Linux, 'tudo é um arquivo', mas não creio que possa simplesmente montar esses aplicativos no contêiner php-fpm e esperar que funcionem. Também parece bastante hacky e o contêiner php-fpm pode não ser o mesmo sistema operacional, perder requisitos ou eu não conseguiria executar a 'configuração dos sensores'.
  • É claro que eu poderia executar esses aplicativos no sistema operacional principal e gravar os resultados em um arquivo de vez em quando e montá-lo no contêiner. Mas novamente; isso anula o propósito do docker?
  • Suponho que eu poderia criar minha própria versão do PHP-fpm, mas isso significaria que eu teria que recriá-la toda vez que houvesse uma atualização para o php? Isso também parece um hack.

Então, qual seria a maneira correta de fazer isso (não precisa ser nenhuma das opções acima).


Atualmente tenho a seguinte 'solução de trabalho':

(composição do Docker)

php:
image: php:7-fpm
privileged: true
volumes:
    - /usr/sbin/hddtemp:/usr/sbin/hddtemp
    - /etc/hddtemp.db:/etc/hddtemp.db

(PHP)

var_dump(shell_exec("/usr/sbin/hddtemp /dev/sda 2>&1"));

No entanto; neste caso eu tenho que rodar o PHP em modo 'privilegiado' no docker, meio que sinto que isso está errado, mas ele precisa acessar o diskinfo?

Responder1

Não são os comandos que estão faltando. Você pode colocar cópias dos comandos no contêiner. Ou há equivalente. O que falta é o acesso às informações de que necessitam.

Você pode adicionar esta minha montagem /procdo host ao contêiner.Tenha cuidado, pois isso quebrará todo o isolamento. Você pode montá-lo somente leitura e hidepid = 2. Também pode haver outras opções.

informação relacionada