Docker Versione 1.12
, ho un Dockerfile
da qui
FROM nginx:latest RUN touch /marker ADD ./check_running.sh /check_running.sh RUN chmod +x /check_running.sh HEALTHCHECK --interval=5s --timeout=3s CMD ./check_running.sh
Sono in grado di rotolare gli aggiornamenti ei controlli di salute con check_running.sh
script shell di check_running.sh
. Qui lo script check_running.sh
viene copiato in image
, quindi il contenitore lanciato lo ha.
Ora, la mia domanda è che ci sia un modo per controllare la salute dal lato esterno del contenitore e lo script che si trova anche fuori.
Eccetto un command di verifica della salute per get la prestazione del contenitore (dipende da quello che abbiamo scritto nello script), SE il contenitore non funziona bene dovrebbe tornare alla versione precedente ( tipo di process che controlla i contenitori, se non è buono, dovrebbe tornare indietro a precedenti )
Grazie
c'è un modo per controllare la salute dal lato esterno del contenitore e lo script che si trova anche fuori.
Il genere di un process che controlla i contenitori, se non è buono, dovrebbe tornare al precedente
Hai diverse opzioni:
cat script.sh | docker exec -it container sh -s
cat script.sh | docker exec -it container sh -s
. ps -Zax
o cercare di cercare i figli del demone ) oppure puoi dare a ciascuno contenere un ID utente specifico con --user 12345
e quindi cercare quello o ad esempio collegarsi ai suoi servizi. Dovresti essere sicuro che stava correndo dentro il contenitore giusto. È ansible accedere al filesystem dei contenitori sotto /var/lib/docker/devicemapper/mnt/<hash>/rootfs
. docker inspect --format='{{json .State.Health.Status}}' <containername>
combinato ad esempio una row nel Dockerfile: HEALTHCHECK CMD wget -q -s http://google.com
per verificare che il contenitore abbia accesso a Internet. Raccommand l'opzione 3, perché probabilmente sarà più compatibile con altri strumenti in futuro.
Ho appena ricevuto un commento da un blog !. Ha riferito la documentazione Docker della sezione HealthCheck . C'è un'opzione di controllo di salute per il command docker per "ignorare" i predefiniti del file dockerfile. Non ho ancora controllato !. Ma mi sembra buono per get quello che voglio. Verificherà e aggiornare la risposta!
Questo non è disponibile con l'opzione Dockerfile HEALTHCHECK
, tutti i controlli eseguiti all'interno del contenitore. Per me, questa è una buona cosa in quanto evita che il codice potenzialmente non attendibile viene eseguito direttamente nell'host e ti consente di includere le dependencies per il controllo di salute all'interno del contenitore.
Se hai bisogno di monitorare il tuo contenitore dall'esterno, devi usare un altro strumento o un'applicazione di monitoraggio, ci sono tantissimi di essi.
È ansible visualizzare i risultati del controllo sanitario eseguendo l' docker inspect
su un contenitore.
Un altro approccio a seconda della tua applicazione sarebbe quello di esporre un endpoint di /healthz
che il healthcheck anche sonde, in questo modo può essere interrogato esternamente o internamente come necessario.
Il command Docker inspect consente di visualizzare l'output di comandi che riescono o non riescono
docker inspect --format='{{json .State.Health}}' your-container-name