
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_exec
ou exec
o script .sh que fiz for encontrado e executado.
No entanto, ele não exibe a saída de hddtemp
e (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 /proc
do 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.