Lors du développement et du déploiement d'applications PHP, savoir si votre environnement PHP s'exécute dans un conteneur Docker peut vous aider à faire des optimisations et des ajustements ciblés. Habituellement, un environnement conteneurisé fournit un environnement d'exécution isolé, donc dans certains cas, nous devons vérifier si PHP s'exécute dans un conteneur Docker.
Cet article présentera comment utiliser la fonction PHP_UNAME () de PHP pour déterminer si votre PHP s'exécute dans un conteneur Docker.
php_uname () est une fonction intégrée de PHP, qui est principalement utilisée pour renvoyer les informations du système, similaires à la commande uname dans Unix Systems. Il renverra le nom du système d'exploitation, le nom d'hôte, la version et d'autres informations du système actuel.
L'utilisation de base de la fonction est la suivante:
php_uname();
Cela renverra une chaîne similaire à ce qui suit (en fonction du système d'exploitation):
Linux myhostname 4.15.0-45-generic #48-Ubuntu SMP Thu Jan 17 16:24:23 UTC 2019 x86_64
Cette chaîne contient des informations telles que le type de système d'exploitation, le nom d'hôte, la version du noyau, etc.
Les conteneurs Docker utilisent généralement des versions de noyau spécifiques et le fichier / proc / 1 / cgroup dans le conteneur contiendra des informations liées à Docker. Par conséquent, il n'est pas facile de juger directement si PHP est dans Docker en utilisant php_uname () . Mais nous pouvons juger en combinant les fichiers système.
Afficher la sortie php_uname ()
Tout d'abord, utilisez php_uname () pour produire les informations du système d'exploitation:
echo php_uname();
Vous obtiendrez une sortie similaire à ce qui suit:
Linux myhostname 5.4.0-100-generic #113-Ubuntu SMP Wed Nov 25 13:02:28 UTC 2020 x86_64
Cela ne nous dit pas directement si PHP s'exécute dans Docker. Pour plus de vérification, nous devons vérifier les caractéristiques du conteneur Docker.
Combiné avec / proc / 1 / cgroup fichier
Le système de fichiers d'un conteneur Docker contient généralement le fichier / proc / 1 / cgroup , et dans ce fichier, nous pouvons trouver des informations liées au conteneur Docker. En détectant le contenu du fichier, nous pouvons déduire s'il s'exécute dans l'environnement Docker.
Vous pouvez utiliser le code suivant pour vérifier:
function isRunningInDocker() {
// Vérifiez s'il existe /proc/1/cgroup document
if (is_readable('/proc/1/cgroup')) {
$cgroup = file_get_contents('/proc/1/cgroup');
// Déterminez s'il contient docker Le logo
if (strpos($cgroup, 'docker') !== false) {
return true; // Courir dans Docker milieu
}
}
return false; // 未Courir dans Docker milieu
}
if (isRunningInDocker()) {
echo "PHP En cours Docker 容器milieu运行!";
} else {
echo "PHP 没有Courir dans Docker 容器milieu。";
}
Le code vérifie le fichier / proc / 1 / cgroup et cherche s'il existe des balises liées à Docker .
Si le fichier contient la chaîne d'identification Docker, vous pouvez vous assurer que PHP s'exécute dans le conteneur Docker.
<?php
// utiliser php_uname() Obtenez des informations sur le système d'exploitation
echo 'Informations sur le système d'exploitation: ' . php_uname() . "\n";
// Vérifiez si c'est Docker 容器milieu运行
function isRunningInDocker() {
if (is_readable('/proc/1/cgroup')) {
$cgroup = file_get_contents('/proc/1/cgroup');
if (strpos($cgroup, 'docker') !== false) {
return true; // Oui Docker environnement
}
}
return false; // 不Oui Docker environnement
}
if (isRunningInDocker()) {
echo "PHP En cours Docker 容器milieu运行!";
} else {
echo "PHP 没有Courir dans Docker 容器milieu。";
}
?>
Grâce à la méthode ci-dessus, vous pouvez utiliser php_uname () pour obtenir des informations du système d'exploitation et les combiner avec la vérification des balises liées à Docker dans le fichier / proc / 1 / cgroup pour déterminer si PHP s'exécute dans le conteneur Docker. C'est un moyen soigné et efficace de vous aider à effectuer des actions ou des ajustements spécifiques dans un environnement conteneurisé.
J'espère que cet article vous aide! Si vous avez plus de questions, veuillez visiter notre site Web.