Script Shell per il docker ps -a | grep per trovare il numero di certi contenitori in esecuzione

Voglio scrivere uno script che viene eseguito dal mio server di sviluppo che rimuove i contenitori di tipo "simili" prima di build ed eseguire un nuovo contenitore.

Di seguito è il pseudo codice per lo script bash che mi serve

  • Alias ​​non funziona nello script con #! / Usr / bin / env php
  • redirect temporaneamente STDOUT ad un altro descrittore di file, ma ancora allo schermo
  • Come faccio a eseguire due diversi comandi a lungo funzionamento contemporaneamente in uno script bash?
  • Calcolare la media di each 5 campioni con rrdtool o altre lingue
  • Quando ucciderà il PID fallire?
  • Come faccio a recuperare un process disown'd?
  • var name = $1 var number_of_results = # of containers returned from $(docker ps -a | grep "$name") if(number_of_result > 0) docker rm -f $(docker ps -a | grep "$name") 

    2 Solutions collect form web for “Script Shell per il docker ps -a | grep per trovare il numero di certi contenitori in esecuzione”

    Il seguente script deve eseguire ciò che si desidera:

     #!/bin/bash name=$1 matchingStarted=$(docker ps --filter="name=$name" -q | xargs) [[ -n $matchingStarted ]] && docker stop $matchingStarted matching=$(docker ps -a --filter="name=$name" -q | xargs) [[ -n $matching ]] && docker rm $matching 

    In pratica, controlla se c'è un contenitore in esecuzione con il nome fornito e lo interrompe se lo trova. Quindi rimuove each contenitore con il nome fornito.

    Nota : è ansible aggiungere una certa validazione di argomenti, come se utilizzata senza argomento, questo script interromperà tutti i contenitori in esecuzione e cancella tutti i container interrotti. Non l'ho aggiunto qui per mantenerlo semplice e facilmente leggibile.

    Devi tenere conto di alless due casi: rimuovere il contenitore smarrito, che può essere rimosso con un singolo command e rimuovendo i contenitori in esecuzione, in cui il contenitore deve essere interrotto prima di essere eliminato.

    Oltre a questo, invece di utilizzare grep per trovare il nome del contenitore, vorrei usare l'opzione di filter di docker ps , in questo modo non fininetworking a catturare il contenitore sbagliato solo perché dire che l'opzione di command corrisponde al nome che hai inserito grep. Ecco come eliminerei tutti i contenitori simili, seguire rigorosamente la sequenza seguente –

    1. Rimuovere i contenitori in esecuzione
      per container_id in $ (docker ps --filter = "name = $ nome" -q); do stop docker $ container_id && docker rm $ container_id; done 
    1. Rimuovere i contenitori fermati, poiché abbiamo smesso di eseguire i contenitori nel passaggio 1.
      per container_id in $ (docker ps --filter = "name = $ nome" -q -a); do docker rm $ container_id; done 

    L'opzione -a includerà tutti i contenitori, inclusi quelli fermi. Non utilizzare -a , l'opzione predefinita, includerà solo i contenitori in esecuzione. Quindi, al passo uno, si rimuovono i contenitori in esecuzione e poi sul passo due si procede con quelli fermi. Per rimuovere o arrestare un contenitore, tutto ciò che serve è l'ID contenitore, le opzioni -q emette solo l'ID.

    Suggerimenti per Linux e Windows Server, quali Ubuntu, Centos, Apache, Nginx, Debian e argomenti di rete.