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

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.