Skip to content

Instantly share code, notes, and snippets.

@cmoro-deusto
Forked from wdullaer/docker-cleanup
Last active August 29, 2015 14:19
Show Gist options
  • Select an option

  • Save cmoro-deusto/d9bd13bf1b4e64227d67 to your computer and use it in GitHub Desktop.

Select an option

Save cmoro-deusto/d9bd13bf1b4e64227d67 to your computer and use it in GitHub Desktop.

Revisions

  1. @wdullaer wdullaer revised this gist Sep 4, 2014. 1 changed file with 15 additions and 10 deletions.
    25 changes: 15 additions & 10 deletions docker-cleanup
    Original file line number Diff line number Diff line change
    @@ -2,20 +2,23 @@
    # Cleanup docker files: untagged containers and images.
    #
    # Use `docker-cleanup -n` for a dry run to see what would be deleted.

    untagged_containers() {
    # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
    # NOTE: "[0-9a-f]{12}" does not work with GNU Awk 3.1.7 (RHEL6).
    # Ref: https://github.com/blueyed/dotfiles/commit/a14f0b4b#commitcomment-6736470
    docker ps -a | tail -n +2 | awk '$2 ~ "^[0-9a-f]+$" {print $'$1'}'
    # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
    # NOTE: "[0-9a-f]{12}" does not work with GNU Awk 3.1.7 (RHEL6).
    # Ref: https://github.com/blueyed/dotfiles/commit/a14f0b4b#commitcomment-6736470
    docker ps -a | tail -n +2 | awk '$2 ~ "^[0-9a-f]+$" {print $'$1'}'
    }

    untagged_images() {
    # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
    # NOTE: intermediate images (via -a) seem to only cause
    # "Error: Conflict, foobarid wasn't deleted" messages.
    # Might be useful sometimes when Docker messed things up?!
    # docker images -a | awk '$1 == "<none>" {print $'$1'}'
    docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
    # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
    # NOTE: intermediate images (via -a) seem to only cause
    # "Error: Conflict, foobarid wasn't deleted" messages.
    # Might be useful sometimes when Docker messed things up?!
    # docker images -a | awk '$1 == "<none>" {print $'$1'}'
    docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
    }

    # Dry-run.
    if [ "$1" = "-n" ]; then
    echo "=== Containers with uncommitted images: ==="
    @@ -31,9 +34,11 @@ if [ -n "$1" ]; then
    echo " -n: dry run: display what would get removed."
    exit 1
    fi

    # Remove containers with untagged images.
    echo "Removing containers:" >&2
    untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true

    # Remove untagged images
    echo "Removing images:" >&2
    untagged_images 3 | xargs --no-run-if-empty docker rmi
  2. @wdullaer wdullaer created this gist Sep 4, 2014.
    39 changes: 39 additions & 0 deletions docker-cleanup
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,39 @@
    #!/bin/sh
    # Cleanup docker files: untagged containers and images.
    #
    # Use `docker-cleanup -n` for a dry run to see what would be deleted.
    untagged_containers() {
    # Print containers using untagged images: $1 is used with awk's print: 0=line, 1=column 1.
    # NOTE: "[0-9a-f]{12}" does not work with GNU Awk 3.1.7 (RHEL6).
    # Ref: https://github.com/blueyed/dotfiles/commit/a14f0b4b#commitcomment-6736470
    docker ps -a | tail -n +2 | awk '$2 ~ "^[0-9a-f]+$" {print $'$1'}'
    }
    untagged_images() {
    # Print untagged images: $1 is used with awk's print: 0=line, 3=column 3.
    # NOTE: intermediate images (via -a) seem to only cause
    # "Error: Conflict, foobarid wasn't deleted" messages.
    # Might be useful sometimes when Docker messed things up?!
    # docker images -a | awk '$1 == "<none>" {print $'$1'}'
    docker images | tail -n +2 | awk '$1 == "<none>" {print $'$1'}'
    }
    # Dry-run.
    if [ "$1" = "-n" ]; then
    echo "=== Containers with uncommitted images: ==="
    untagged_containers 0
    echo
    echo "=== Uncommitted images: ==="
    untagged_images 0
    exit
    fi
    if [ -n "$1" ]; then
    echo "Cleanup docker files: remove untagged containers and images."
    echo "Usage: ${0##*/} [-n]"
    echo " -n: dry run: display what would get removed."
    exit 1
    fi
    # Remove containers with untagged images.
    echo "Removing containers:" >&2
    untagged_containers 1 | xargs --no-run-if-empty docker rm --volumes=true
    # Remove untagged images
    echo "Removing images:" >&2
    untagged_images 3 | xargs --no-run-if-empty docker rmi