Dies ist meine Lösung, um nach einem laufenden Container zu suchen, ihn anzuhalten und dann zu entfernen.
CNAME=$CONTAINER_NAME-$CODE_VERSION
if [ "$(docker ps -qa -f name=$CNAME)" ]; then
echo ":: Found container - $CNAME"
if [ "$(docker ps -q -f name=$CNAME)" ]; then
echo ":: Stopping running container - $CNAME"
docker stop $CNAME;
fi
echo ":: Removing stopped container - $CNAME"
docker rm $CNAME;
fi
Ich musste zu oft danach suchen, weil selbst die Antwort über 100 oben nicht funktioniert. Ich denke, der Grund ist ein Missverständnis über Docker ps. docker ps
listet RUNNING-Container auf. docker ps -q
macht dasselbe, aber die Ausgabe ist so gestreift, dass sie nur die container_id enthält. docker ps -a
listet ALLE Container auf (laufend oder nicht). docker ps -qa
Dann ist eine einfache Liste aller Container, während docker ps -q
es eine einfache Liste der laufenden Container ist. docker ps -q -f name=ContainerName
ist dann eine einfache Liste laufender Container mit dem Namen ContainerName. docker ps -qa -f
würde auch verlassene Container einschließen, daher muss die Logik darin bestehen, -a (dort, läuft oder nicht) und dann -a zu überprüfen, um festzustellen, ob es nicht nur dort ist, sondern auch läuft (und zuerst gestoppt werden muss).
-a
oder der Versuch, einen verlassenen Container auszuführen, schlägt fehl.