Für Container ist die einfachste Integritätsprüfung die Integritätsprüfung auf Prozessebene, die überprüft, ob der Prozess aktiv ist. Der Docker Daemon überwacht automatisch den PID1-Prozess im Container. Wenn im Docker-Run-Befehl die Neustartrichtlinie angegeben ist, kann der beendete Container gemäß der Richtlinie automatisch neu gestartet werden. In vielen praktischen Szenarien reicht die Verwendung von Integritätsprüfmechanismen allein auf Prozessebene bei weitem nicht aus. Beispielsweise kann der Containerprozess, obwohl er noch läuft, aufgrund eines Anwendungsdeadlocks nicht mehr auf Benutzeranforderungen reagieren. Solche Probleme können durch die Prozessüberwachung nicht erkannt werden. Um zu verhindern, dass der Container nach einem Stromausfall oder einer abnormalen Abschaltung nicht automatisch gestartet werden kann, können wir normalerweise Folgendes hinzufügen: --restart=immer Zum Beispiel [root@aliyun ~]# docker run --restart=always -d --name blog -d -v /www:/www -v /wwwlogs:/var/log/wwwlogs -p 65423:65422 -p 80:80 -p 443:443 677 7714a84063ee6d405c80b891254bba0e5930f5d271c5ad76cfd6e2f0058d8056 Auf diese Weise kann der Container automatisch neu gestartet werden, manchmal gerät das Programm jedoch in einen Deadlock-Zustand oder einen Endlosschleifenzustand, der Anwendungsprozess wird nicht beendet, aber der Container kann keine Dienste mehr bereitstellen. Vor 1.12 konnte Docker diesen Zustand des Containers nicht erkennen und ihn nicht neu planen. Dies führte dazu, dass einige Container zwar keine Dienste bereitstellen konnten, aber weiterhin Benutzeranforderungen akzeptierten. Seit 1.12 verfügt Docker über die Anweisung HEALTHCHECK, die eine Befehlszeile angibt, um zu bestimmen, ob der Servicestatus des Hauptprozesses des Containers noch normal ist, und so den tatsächlichen Status des Containers realistischer widerspiegelt. Wenn die HEALTHCHECK-Anweisung in einem Image angegeben ist, wird der Container damit gestartet. Der Anfangsstatus ist „Starten“. Nachdem die Prüfung der HEALTHCHECK-Anweisung erfolgreich war, ändert sich der Status in „Healthy“. Wenn die Prüfung eine bestimmte Anzahl von Malen hintereinander fehlschlägt, ändert sich der Status in „Unhealthy“. HEALTHCHECK unterstützt die folgenden Optionen:
Der auf HEALTHCHECK [Option] CMD folgende Befehl hat dasselbe Format wie ENTRYPOINT, das in Shell-Format und Exec-Format unterteilt werden kann. Der Rückgabewert des Befehls bestimmt, ob die Integritätsprüfung erfolgreich ist oder nicht: 0: Erfolg; 1: Fehler; 2: reserviert, verwenden Sie diesen Wert nicht. Schauen wir uns diese Dockerfile-Datei an VON centos LABEL-Betreuer „awen Email: <[email protected]>“ ARBEITSVERZEICHNIS /opt/ KOPIEREN CentOS7-Base-163.repo /etc/yum.repos.d/CentOS-Base.repo KOPIEREN Sie nginx /etc/init.d/nginx ENV NGINX_V=1.13.5 \ OPENSSL_V=1.0.2l \ PCRE_V=8,41 \ ZLIB_V=1.2.11 Führen Sie den Befehl yum -y update \ aus. && yum -y installiere OpenSSH-Server, OpenSSL, GCC, GCC-C++, PCRE-Entwicklung, OpenSSL-Entwicklung, Zlib-Entwicklung, wget, make perl, tar, net-tools \ && wget -c -4 https://nginx.org/download/nginx-$NGINX_V.tar.gz \ && wget -c -4 https://www.openssl.org/source/openssl-$OPENSSL_V.tar.gz \ && wget -c -4 ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-$PCRE_V.tar.gz \ && wget -c -4 http://zlib.net/zlib-$ZLIB_V.tar.gz \ && Gruppenzuordnung -r www && Benutzerzuordnung -r -g www www \ && tar zxvf zlib-$ZLIB_V.tar.gz \ && cd zlib-$ZLIB_V \ && ./konfigurieren \ && machen \ && make install \ && cd /opt \ && tar zxvf pcre-$PCRE_V.tar.gz \ && cd pcre-$PCRE_V \ && ./konfigurieren \ && machen \ && make install \ && cd /opt \ && tar zxvf openssl-$OPENSSL_V.tar.gz \ && tar zxvf nginx-$NGINX_V.tar.gz \ && cd nginx-$NGINX_V \ && ./configure --prefix=/usr/local/nginx --user=www --group=www --with-pcre=/opt/pcre-$PCRE_V --with-http_ssl_module --with-zlib=/opt/zlib-$ZLIB_V --with-openssl=/opt/openssl-$OPENSSL_V --with-http_v2_module --with-http_ssl_module \ && machen \ && make install \ && rm -rf /opt/* \ && mkdir -p /usr/local/nginx/ssl \ && mkdir -p /usr/local/nginx/conf/vhost \ && mkdir -p /var/log/wwwlogs/ \ && mkdir -p /www/ \ && ssh-keygen -t rsa -f /etc/ssh/ssh_host_rsa_key -N '' \ && ssh-keygen -t dsa -f /etc/ssh/ssh_host_dsa_key -N '' \ && ssh-keygen -t ecdsa -f /etc/ssh/ssh_host_ecdsa_key -N '' \ && ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N '' \ && echo "RSAAuthentication yes" >> /etc/ssh/sshd_config \ && echo "PubkeyAuthentication ja" >> /etc/ssh/sshd_config \ && sed -i "s/PasswordAuthentication yes/PasswordAuthentication no/g" /etc/ssh/sshd_config \ && sed -i "s/UsePAM ja/UsePAM nein/g" /etc/ssh/sshd_config \ && sed -i "s/#Port 22/Port 65422/g" /etc/ssh/sshd_config \ && yum alles reinigen \ && mkdir /var/run/sshd \ && chmod +x /etc/init.d/nginx \ && rm -rf /root/*.cfg \ && echo "Asien/Shanghai" > /etc/lokale Zeit KOPIEREN ssl/* /usr/local/nginx/ssl/ KOPIEREN vhost/* /usr/local/nginx/conf/vhost/ KOPIEREN Sie nginx.conf /usr/local/nginx/conf/ KOPIEREN ssh/* /root/.ssh/ VOLUME ["/www", "/var/log/wwwlogs", "/usr/local/nginx/ssl", "/usr/local/nginx/conf/vhost"] AUSLEGEN 65422 80 443 GESUNDHEITSCHECK CMD curl -fs http://localhost/ || Ausfahrt 1 EINSTIEGSPUNKT /etc/init.d/nginx start && chown -R www:www /var/log/wwwlogs/ && /usr/sbin/sshd -D In GESUNDHEITSCHECK CMD curl -fs http://localhost/ || Ausfahrt 1 Es handelt sich um die hinzugefügte Konfiguration zur Integritätsüberwachung, die dann kompiliert und gestartet wird. Wenn Sie den Prozess überprüfen, werden Sie feststellen, dass sein Status „Starten“ lautet. [root@aliyun ~]# docker ps -a CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 7714a84063ee 677 "/bin/sh -c '/etc/ini" vor 3 Sekunden. 2 Sekunden aktiv (Gesundheit: wird gestartet) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:65423->65422/tcp Blog Warten Sie einen Moment und Sie werden feststellen, dass sein Status gesund ist [root@aliyun ~]# docker ps -a CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN 7714a84063ee 677 "/bin/sh -c '/etc/ini" Vor etwa einer Minute Aktiv Vor etwa einer Minute (fehlerfrei) 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:65423->65422/tcp Blog Wir können den Status der letzten drei Male durch Inspect einsehen [root@aliyun ~]# docker inspect --format '{{json .State.Health}}' blog | python -m json.tool { "FailingStreak": 0, "Protokoll": [ { "Ende": "2017-10-11T11:15:27.516562686+08:00", "ExitCode": 0, "Ausgabe": "<html>\r\n<head><title>301 dauerhaft verschoben</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 dauerhaft verschoben</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n", "Start": "2017-10-11T11:15:27.470554485+08:00" }, { "Ende": "2017-10-11T11:15:57.563377729+08:00", "ExitCode": 0, "Ausgabe": "<html>\r\n<head><title>301 dauerhaft verschoben</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 dauerhaft verschoben</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n", "Start": "2017-10-11T11:15:57.516690754+08:00" }, { "Ende": "2017-10-11T11:16:27.609685416+08:00", "ExitCode": 0, "Ausgabe": "<html>\r\n<head><title>301 dauerhaft verschoben</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 dauerhaft verschoben</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n", "Start": "2017-10-11T11:16:27.563533362+08:00" }, { "Ende": "2017-10-11T11:16:57.654441173+08:00", "ExitCode": 0, "Ausgabe": "<html>\r\n<head><title>301 dauerhaft verschoben</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 dauerhaft verschoben</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n", "Start": "2017-10-11T11:16:57.609810588+08:00" }, { "Ende": "2017-10-11T11:17:27.701113019+08:00", "ExitCode": 0, "Ausgabe": "<html>\r\n<head><title>301 dauerhaft verschoben</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>301 dauerhaft verschoben</h1></center>\r\n<hr><center>nginx</center>\r\n</body>\r\n</html>\r\n", "Start": "2017-10-11T11:17:27.654580727+08:00" } ], "Status": "gesund" } Wenn die Integritätsprüfung über die Anzahl der Wiederholungsversuche hinaus kontinuierlich fehlschlägt, ändert sich der Status in „(fehlerhaft)“. Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
Inhaltsverzeichnis 1. Was ist Komponentenbildung?...
Inhaltsverzeichnis 1. Umgebung Einführung 2. Inst...
1. Scroll Snap ist eine unverzichtbare Fähigkeit ...
50 Zeilen Code zum Ändern von 5 Hautfarben, einsc...
1. Verwenden Sie das Image mysql/mysql-server:lat...
Inhaltsverzeichnis 1. Erstellen Sie ein Redis-Doc...
Entsprechend den wichtigsten Websites und persönl...
In diesem Artikelbeispiel wird der spezifische JS...
Löschen einer Datei anhand ihrer Inode-Nummer Ver...
In diesem Artikel wird der spezifische JS-Code zu...
Ähnlich wie der von GitHub bereitgestellte Code-H...
Ich habe vor kurzem HTML neu gelernt, was als neue...
Die WEB-Entwicklung besteht hauptsächlich aus zwe...
Inhaltsverzeichnis Überblick 1. Übersicht über Ei...
Inhaltsverzeichnis Normale Paging-Abfrage So opti...