GithubHelp home page GithubHelp logo

byrnedo / docker-reg-tool Goto Github PK

View Code? Open in Web Editor NEW
195.0 11.0 57.0 20 KB

Docker registry cli tool, primarily for deleting images.

License: MIT License

Shell 96.88% Dockerfile 3.12%
docker docker-registry docker-registry-cleanup

docker-reg-tool's Introduction

Docker Registry Tool

Small bash script to do repetitive things with docker registry > 2.1 ( I think, whichever version supports delete by manifest)

Dependencies

Jq

Usage:

    ./docker_reg_tool REGISTRY_BASE_URL ACTION [OPTIONS..]

    Actions:

    - list               list repos

    - list REPO          list tags for repo

    - delete REPO TAG    delete tag for repo

    Example:

    List all repos
        /$ ./docker_reg_tool https://registry.my.domain list

    List tags for one repo
        /$ ./docker_reg_tool https://registry.my.domain list some-repo

    Delete tag for a repo
        /$ ./docker_reg_tool https://registry.my.domain delete some-repo some-tag

If you want something more fully featured then check out crane.

Docker config file location

If your config.json location is not ~/.docker/config.json, you can define the location with the DOCKER_CONFIG environment variable.

DOCKER_CONFIG="/your/path/to/docker/config.json" ./docker_reg_tool ...

Credentials

...are sniffed out of ~/.docker/config.json. So you need to do docker login... before you can use this tool.

They can also be set with the BASIC_AUTH environment variable.

BASIC_AUTH=user:pass ./docker_reg_tool ...

Only been tested on Basic auth.

Insecure Registry

Set the INSECURE_REGISTRY to true;

INSECURE_REGISTRY=true ./docker_reg_tool ...

Registry Settings

In order for this to work, the registry needs to be running with If docker image:

REGISTRY_STORAGE_DELETE_ENABLED="true"

Or in the config file:

storage:
  delete:
    enabled: true

Also, the size will not decrease until the garbage collector runs. You can trigger it manually with:

docker exec registry /bin/registry garbage-collect -m=true /etc/docker/registry/config.yml

Debugging

Set the TRACE environment variable to true to turn on set -x

TRACE=true ./docker_reg_tool ...

Docker Image

See https://hub.docker.com/r/byrnedo/reg-tool/

docker-reg-tool's People

Contributors

byrnedo avatar elerch avatar hoermto avatar jcross-linkup avatar lwilke avatar panuhorsmalahti avatar vladkras avatar wolkenschieber avatar wswind avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

docker-reg-tool's Issues

~/.docker/config.json cannot have the protocol specified

In my ~/.docker/config.json file I have the protocol specified. That causes the following error:

$ ./docker_reg_tool https://docker-reg:5000 list repo
jq: error (at <stdin>:1): Cannot iterate over null (null)

I've created a pull request (#7) to allow the protocol to be specified in the ~/.docker/config.json file as well as ensure that jq doesn't return null silently when trying to extract the creds.

Cannot iterate over null

Hi!

Hoping this tool can help me delete some repo.

I tried list on two different repos and get
jq: error (at <stdin>:3): Cannot iterate over null (null)

I installed the latest version 1.6 of jq on Mac OS.
The credentials are stored in the docker config.json file.

Failed to delete: 405

Hi!
Hoping this script can help me delete some tags.

I tried delete and the error is:

DIGEST: sha256:b32067df1e504742bdea7c169916ddc51b848856f0d02c7b1c6a99c6533e5921
Failed to delete: 405

Regards

curl DELETE unsupported

Hello,

When I want to delete an image tag, my registry returns an error on curl DELETE request;

+ digest=sha256:1129ffce3939335244f6332524072bfef27b9bd8fe23a64aa1e288752b36526c
+ echo 'DIGEST: sha256:1129ffce3939335244f6332524072bfef27b9bd8fe23a64aa1e288752b36526c'
DIGEST: sha256:1129ffce3939335244f6332524072bfef27b9bd8fe23a64aa1e288752b36526c
++ curlCmd -s -o /dev/null -w '%{http_code}' -H Accept:application/vnd.docker.distribution.manifest.v2+json -X DELETE http://registry.domain.com/v2/myimage/manifests/sha256:1129ffce3939335244f6332524072bfef27b9bd8fe23a64aa1e288752b36526c
++ curl '' --header '' -s -o /dev/null -w '%{http_code}' -H Accept:application/vnd.docker.distribution.manifest.v2+json -X DELETE http://registry.domain.com/v2/myimage/manifests/sha256:1129ffce3939335244f6332524072bfef27b9bd8fe23a64aa1e288752b36526c
+ result='000{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
405'
+ '[' '000{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
405' -eq 202 ']'
./docker_reg_tool: line 116: [: 000{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
405: integer expression expected
+ echo 'Failed to delete: 000{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
405'
Failed to delete: 000{"errors":[{"code":"UNSUPPORTED","message":"The operation is unsupported."}]}
405
+ exit 3```

conditional binary operator expected

I catch this error conditional binary operator expected on every line with

if [[ -v "VARNAME" ]] ...

consider using

if [[ ${VARNAME} ]] ...

instead. It seems -v was introduced in bash 4+ while macos still uses version 3

Command not found

Hi there!

Wanted to use your script, but when I issue this command:
root@test:~ ./docker_reg_tool http://localhost:5000 list
I get this error msg:
./docker_reg_tool: line 73: jq: command not found

Tried to add +x to the second line of the file, didnt help.
Any idea?
Thanks! :)

insecure registry and list restricted to first 100 entries

Thank you for the script. Very useful.

I needed to add -k in curl as my local registry is insecure.

Any way - the list reports only 100 entries. This may be restriction from the API. Any idea on getting list of all entries. My private registry has more than 300 entries.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.