Maison Opération et maintenance Nginx Comment faire défiler les journaux nginx dans Docker

Comment faire défiler les journaux nginx dans Docker

May 29, 2023 pm 09:40 PM
docker nginx

utilisation de Docker

 1. docker ps pour afficher les conteneurs en cours d'exécution

 2. images docker pour afficher les images docker

 3. docker rm id (identifiant du conteneur) Supprimer le conteneur (l'identifiant du conteneur peut être visualisé via docker ps, le conteneur doit être arrêté 3.1 Supprimer tous les conteneurs docker rm `docker ps -a -q`

  4. docker stop id (identifiant du conteneur) Arrêter l'exécution du conteneur

5. docker rmi id (identifiant miroir) Supprimer l'image

6 .docker pull ubuntu:16.04 (nom de l'image : numéro de version) Téléchargez l'image

 7. docker run -it ubuntu:16.04 Créer et exécuter le conteneur conteneur

  -t signifie spécifier un pseudo-terminal ou un terminal dans le nouveau conteneur

- je veux dire que nous sommes autorisés à interagir avec (stdin) dans le conteneur

  -p spécifie le port mappé

  -d exécute le conteneur en arrière-plan et imprime l'identifiant du conteneur

  7.1 docker run -dit ubuntu:16.04 Create et exécutez le conteneur en arrière-plan

  7.2 docker run -ditp 8080:8080 (port hôte : port du conteneur) ubuntu:16.04 Créez et exécutez le conteneur en arrière-plan et mappez le port du conteneur

 8. docker attach id ( ID du conteneur) Entrez dans l'environnement du conteneur en cours d'exécution

 9. Quitter le conteneur

  9.1 exit quitte directement le conteneur et met fin à l'exécution du conteneur

  9.2 [ctrl+p]+[ctrl+q] (touche de raccourci) quitte le conteneur, mais ne termine pas l'exécution du conteneur

 10. docker commit -m' version identification ' id (identifiant du conteneur) ubuntu:16.04 (image et numéro de version) Soumettez l'image et générez l'image (vous pouvez utiliser cette commande pour empaqueter le conteneur construit dans une nouvelle image ou écraser l'image d'origine (c'est-à-dire modifier le contenu de l'image d'origine, générer si le nom de l'image est le même que le numéro de version, il peut être écrasé directement))


D'accord, tout le monde connaît Docker ici. sont les points clés de cet article, jetons-y un coup d'œil.

nginx lui-même n'a pas géré le problème du roulement du journal, il a envoyé le ballon à l'utilisateur. En règle générale, vous pouvez utiliser l'outil logrotate pour accomplir cette tâche ou, si vous préférez, vous pouvez écrire divers scripts pour accomplir la même tâche. L'auteur de cet article explique comment faire défiler le fichier journal nginx exécuté dans Docker (l'image ci-dessous provient d'Internet).

Comment faire défiler les journaux nginx dans Docker

Thinking

nginx officiel a en fait donné des instructions sur la façon de faire rouler les journaux :


rotation des fichiers journaux

afin de faire pivoter les fichiers journaux, ils doivent d'abord être renommés après que le signal usr1 soit envoyé. au processus maître. Le processus maître rouvrira ensuite tous les fichiers journaux actuellement ouverts et leur attribuera un utilisateur non privilégié sous lequel les processus de travail sont exécutés, en tant que propriétaire, après une réouverture réussie, le processus maître ferme tous les fichiers ouverts et. envoie le message au processus de travail pour lui demander de rouvrir les fichiers. Les processus de travail ouvrent également de nouveaux fichiers et ferment immédiatement les anciens fichiers. Par conséquent, les anciens fichiers sont presque immédiatement disponibles pour le post-traitement, comme la compression.



Le. l'idée générale de cette description est la suivante :


•Renommer d'abord l'ancien fichier journal

•Ensuite, envoyez le signal usr1 au processus maître nginx

•Le processus maître nginx effectuera un traitement après avoir reçu le signal, puis demandera au processus de travail pour rouvrir les fichiers journaux
•Le processus de travail ouvre de nouveaux fichiers journaux et ferme les anciens fichiers journaux

En fait, le seul travail que nous devons vraiment faire est les deux premiers points !

Créez un environnement de test

En supposant que Docker ait été installé sur votre système, nous exécutons ici directement un conteneur nginx :

$ docker run -d \
 -p 80:80 \
 -v $(pwd)/logs/nginx:/var/log/nginx \
 --restart=always \
 --name=mynginx \
 nginx:1.11.3
Copier après la connexion

Notez que nous avons lié et monté les journaux de nginx dans le répertoire des journaux dans le répertoire courant.


Enregistrez le contenu suivant dans le fichier test.sh :

#!/bin/bash
for ((i=1;i<=100000;i++))
do
 curl http://localhost > /dev/null
 sleep 1
done
Copier après la connexion

Ensuite, exécutez ce script pour simuler la génération d'enregistrements de journaux continus.

Script pour créer un journal déroulant

Créez le fichier rotatelog.sh avec le contenu suivant :

#!/bin/bash
getdatestring()
{
 tz=&#39;asia/chongqing&#39; date "+%y%m%d%h%m"
}
datestring=$(getdatestring)
mv /var/log/nginx/access.log /var/log/nginx/access.${datestring}.log
mv /var/log/nginx/error.log /var/log/nginx/error.${datestring}.log
kill -usr1 `cat /var/run/nginx.pid`
Copier après la connexion

La fonction getdatestring prend l'heure actuelle et la formate en une chaîne, telle que "201807241310". il est temps de nommer les fichiers. Notez que le fuseau horaire est spécifié ici via tz='asia/chongqing', car par défaut le format est l'heure UTC, ce qui est bizarre à utiliser (vous devez calculer +8 heures en temps réel). Les deux commandes mv suivantes sont utilisées pour renommer les fichiers journaux. Enfin, envoyez le signal usr1 au processus maître nginx via la commande kill.

Ajoutez des autorisations exécutables au fichier rotatelog.sh via la commande suivante et copiez-le dans le répertoire $(pwd)/logs/nginx :

$ chmod +x rotatelog.sh
$ sudo cp rotatelog.sh $(pwd)/logs/nginx
Copier après la connexion

Effectuez régulièrement des opérations de roulement

Notre nginx s'exécute dans un conteneur, nous besoin Envoyez le signal usr1 au processus maître nginx dans le conteneur. Par conséquent, nous devons exécuter le script rotatelog.sh dans le conteneur mynginx via la commande docker exec :

$ docker exec mynginx bash /var/log/nginx/rotatelog.shL'exécution de la commande ci-dessus une fois générera un lot de nouveaux fichiers journaux comme prévu :

Configurons cette commande dans une tâche planifiée et laissons-la être exécutée à 1 heure chaque matin. Exécutez la commande crontab -e et ajoutez les lignes suivantes à la fin du fichier :

* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh* 1 * * * docker exec mynginx bash /var/log/nginx/rotatelog.sh

Comment faire défiler les journaux nginx dans Docker

保存并退出就可以了。下图是笔者测试过程中每 5 分钟滚动一次的效果:

Comment faire défiler les journaux nginx dans Docker

为什么不在宿主机中直接 mv 日志文件?

理论上这么做是可以的,因为通过绑定挂载的数据卷中的内容从宿主机上看和从容器中看都是一样的。但是真正这么做的时候你很可能碰到权限问题。在宿主机中,你一般使用的是普通用户,而在容器中产生的日志文件的所有者是会是特殊的用户,并且一般不会给其它用户写和执行的权限:


Comment faire défiler les journaux nginx dans Docker

当然,如果你在宿主机中使用的是 root 用户就不会有问题。

能从宿主机中发送的信号吗?

其实这个问题的全称应该是:能从宿主机中给 docker 容器中的 nginx master 进程发送信号吗?

答案是,可以的。

笔者这一文中介绍了容器中信号的捕获问题,感兴趣的朋友可以去看看。在那篇文章中我们介绍了 docker 向容器中进程发送信号的 kill 命令。我们可以通过命令:

$ docker container kill mynginx -s usr

Comment faire défiler les journaux nginx dans Docker

Enregistrez et quittez. L'image ci-dessous est l'effet d'un défilement toutes les 5 minutes pendant le test de l'auteur :

Comment faire défiler les journaux nginx dans Docker Comment Rolling nginx se connecte dans Docker

Pourquoi ne pas mv fichiers journaux directement dans l'hôte ?

Cela est théoriquement possible, car le contenu du volume de données monté via la liaison est le même lorsqu'il est affiché depuis l'hôte et depuis le conteneur. Mais lorsque vous faites cela, vous risquez de rencontrer des problèmes d’autorisation. Sur la machine hôte, vous utilisez généralement un utilisateur ordinaire, tandis que le propriétaire du fichier journal généré dans le conteneur sera un utilisateur spécial, et généralement les autres utilisateurs ne recevront pas d'autorisations d'écriture et d'exécution :


Comment faire défiler les journaux nginx dans Docker🎜🎜Bien sûr, si vous l'utilisez dans l'hôte Si vous êtes l'utilisateur root, il n'y aura aucun problème. 🎜🎜Le signal peut-il être envoyé depuis la machine hôte ? 🎜🎜En fait, le nom complet de cette question devrait être : un signal peut-il être envoyé de l'hôte au processus maître nginx dans le conteneur Docker ? 🎜🎜🎜La réponse est oui. 🎜🎜🎜L'auteur présente le problème de la capture du signal dans les conteneurs dans cet article. Les amis intéressés peuvent y jeter un œil. Dans cet article, nous avons présenté la commande kill de docker qui envoie des signaux aux processus dans un conteneur. On peut utiliser la commande : 🎜🎜$ docker containers kill mynginx -s usr🎜🎜 pour envoyer le signal usr1 au processus n°1 (nginx master) dans le conteneur (cette méthode ne peut envoyer que le signal pour traiter n°1 ): 🎜🎜🎜🎜🎜En combinant les deux questions ci-dessus, nous pouvons écrire une autre façon de faire défiler le journal nginx dans le docker. Cette méthode ne nécessite pas d'exécuter des commandes dans le conteneur via la commande docker exec, mais effectue toutes les opérations sur la machine hôte : 🎜🎜🎜•Renommez d'abord le fichier journal dans le volume de données du conteneur🎜•Envoyez-le au processus n°1 dans le signal usr1 du conteneur🎜

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment sortir du conteneur par Docker Comment sortir du conteneur par Docker Apr 15, 2025 pm 12:15 PM

Quatre façons de quitter Docker Container: Utilisez Ctrl D dans le terminal de conteneur Entrez la commande d'exit dans le terminal de conteneur Utilisez Docker Stop & lt; contener_name & gt; Commande utilise docker kill & lt; contener_name & gt; commande dans le terminal hôte (sortie de force)

Comment redémarrer Docker Comment redémarrer Docker Apr 15, 2025 pm 12:06 PM

Comment redémarrer le conteneur Docker: Obtenez l'ID de conteneur (Docker PS); Arrêtez le conteneur (docker stop & lt; contener_id & gt;); Démarrer le conteneur (docker start & lt; contener_id & gt;); Vérifiez que le redémarrage réussit (Docker PS). Autres méthodes: Docker Compose (redémarrage Docker-Compose) ou API Docker (voir Docker Documentation).

Comment démarrer MySQL par Docker Comment démarrer MySQL par Docker Apr 15, 2025 pm 12:09 PM

Le processus de démarrage de MySQL dans Docker se compose des étapes suivantes: Tirez l'image MySQL pour créer et démarrer le conteneur, définir le mot de passe de l'utilisateur racine et mapper la connexion de vérification du port Créez la base de données et l'utilisateur accorde toutes les autorisations sur la base de données

Comment copier des fichiers dans Docker à l'extérieur Comment copier des fichiers dans Docker à l'extérieur Apr 15, 2025 pm 12:12 PM

Méthodes de copie de fichiers en hôtes externes dans Docker: Utilisez la commande docker cp: exécuter docker cp [options] & lt; Container Path & gt; & lt; Host Path & gt;. Utilisation de volumes de données: créez un répertoire sur l'hôte et utilisez le paramètre -v pour monter le répertoire dans le conteneur lors de la création du conteneur pour obtenir la synchronisation de fichiers bidirectionnels.

Comment vérifier le nom du conteneur Docker Comment vérifier le nom du conteneur Docker Apr 15, 2025 pm 12:21 PM

Vous pouvez interroger le nom du conteneur Docker en suivant les étapes: répertorier tous les conteneurs (Docker PS). Filtrez la liste des conteneurs (à l'aide de la commande grep). Obtient le nom du conteneur (situé dans la colonne "Noms").

Comment mettre à jour l'image de Docker Comment mettre à jour l'image de Docker Apr 15, 2025 pm 12:03 PM

Les étapes pour mettre à jour une image Docker sont les suivantes: Tirez la dernière étiquette d'image Nouvelle image Supprimer l'ancienne image pour une balise spécifique (facultative) Redémarrez le conteneur (si nécessaire)

Comment afficher le processus Docker Comment afficher le processus Docker Apr 15, 2025 am 11:48 AM

Méthode de visualisation du processus docker: 1. Commande Docker CLI: Docker PS; 2. Commande CLI Systemd: Docker d'état SystemCTL; 3. Docker Compose CLI Commande: Docker-Compose PS; 4. Process Explorer (Windows); 5. / Répertoire proc (Linux).

Comment changer la source d'image Docker en Chine Comment changer la source d'image Docker en Chine Apr 15, 2025 am 11:30 AM

Vous pouvez passer à la source de miroir domestique. Les étapes sont les suivantes: 1. Modifiez le fichier de configuration /etc/docker/daemon.json et ajoutez l'adresse source miroir; 2. Après enregistrer et sortir, redémarrez le service Docker Sudo Systemctl Docker pour améliorer la vitesse et la stabilité du téléchargement d'image.

See all articles