Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Deleting Docker Image Tags on DockerHub using the Python Module requests

Tips

  1. You can use Convert curl syntax to Python, Node.js, PHP, R or curlconverter to convert CURL commands to Python requests code.

Get All Tags of a Docker Image

import requests
url = "https://hub.docker.com/v2/repositories/dclong/jupyterhub-ds/tags/"
res = requests.get(url)
res
<Response [200]>
res.json()["results"]
[{'creator': 866262, 'id': 78982771, 'image_id': None, 'images': [{'architecture': 'amd64', 'features': '', 'variant': None, 'digest': 'sha256:9cc71546886c737af290a3d70103e63e8ffdcbf5c49a403cc2f466b4bee455e0', 'os': 'linux', 'os_features': '', 'os_version': None, 'size': 1603009050}], 'last_updated': '2020-03-29T00:42:36.291312Z', 'last_updater': 866262, 'last_updater_username': 'dclong', 'name': 'latest', 'repository': 1838633, 'full_size': 1603009050, 'v2': True}, {'creator': 866262, 'id': 92776564, 'image_id': None, 'images': [{'architecture': 'amd64', 'features': '', 'variant': None, 'digest': 'sha256:9cc71546886c737af290a3d70103e63e8ffdcbf5c49a403cc2f466b4bee455e0', 'os': 'linux', 'os_features': '', 'os_version': None, 'size': 1603009050}], 'last_updated': '2020-03-29T00:42:43.407048Z', 'last_updater': 866262, 'last_updater_username': 'dclong', 'name': '200328', 'repository': 1838633, 'full_size': 1603009050, 'v2': True}, {'creator': 866262, 'id': 80522269, 'image_id': None, 'images': [{'architecture': 'amd64', 'features': '', 'variant': None, 'digest': 'sha256:9cc71546886c737af290a3d70103e63e8ffdcbf5c49a403cc2f466b4bee455e0', 'os': 'linux', 'os_features': '', 'os_version': None, 'size': 1603009050}], 'last_updated': '2020-03-28T17:56:29.182608Z', 'last_updater': 866262, 'last_updater_username': 'dclong', 'name': 'next', 'repository': 1838633, 'full_size': 1603009050, 'v2': True}, {'creator': 866262, 'id': 91939644, 'image_id': None, 'images': [{'architecture': 'amd64', 'features': '', 'variant': None, 'digest': 'sha256:acb385b55453255fa1cdd984227e7a010ed9acbc6f6a3f5dd3b55f0a95160118', 'os': 'linux', 'os_features': '', 'os_version': None, 'size': 1939413195}], 'last_updated': '2020-03-23T23:44:29.506295Z', 'last_updater': 866262, 'last_updater_username': 'dclong', 'name': '200323', 'repository': 1838633, 'full_size': 1939413195, 'v2': True}, {'creator': 866262, 'id': 91756137, 'image_id': None, 'images': [{'architecture': 'amd64', 'features': '', 'variant': None, 'digest': 'sha256:db0d72d5f0611e7edb7a8b37ee095b692ebde18fb45ec7549bad0dd11b812e3a', 'os': 'linux', 'os_features': '', 'os_version': None, 'size': 1941758508}], 'last_updated': '2020-03-22T09:37:22.329669Z', 'last_updater': 866262, 'last_updater_username': 'dclong', 'name': '200322', 'repository': 1838633, 'full_size': 1941758508, 'v2': True}, {'creator': 866262, 'id': 90270919, 'image_id': None, 'images': [{'architecture': 'amd64', 'features': '', 'variant': None, 'digest': 'sha256:f9ab05f682af5f91b36e4c54d2170c6f6a5a6b5a95774dab85fa67446362b4e1', 'os': 'linux', 'os_features': '', 'os_version': None, 'size': 1496134944}], 'last_updated': '2020-03-12T00:30:18.53872Z', 'last_updater': 866262, 'last_updater_username': 'dclong', 'name': '200312', 'repository': 1838633, 'full_size': 1496134944, 'v2': True}, {'creator': 866262, 'id': 89804112, 'image_id': None, 'images': [{'architecture': 'amd64', 'features': '', 'variant': None, 'digest': 'sha256:50503edbd3965932ea6829c6c93dfc53f76c5cd84a40f5ac8fd18e4b4a41bba0', 'os': 'linux', 'os_features': '', 'os_version': None, 'size': 1482447679}], 'last_updated': '2020-03-09T01:38:59.53255Z', 'last_updater': 866262, 'last_updater_username': 'dclong', 'name': '200309', 'repository': 1838633, 'full_size': 1482447679, 'v2': True}, {'creator': 866262, 'id': 89795707, 'image_id': None, 'images': [{'architecture': 'amd64', 'features': '', 'variant': None, 'digest': 'sha256:50503edbd3965932ea6829c6c93dfc53f76c5cd84a40f5ac8fd18e4b4a41bba0', 'os': 'linux', 'os_features': '', 'os_version': None, 'size': 1482447679}], 'last_updated': '2020-03-08T23:20:10.409408Z', 'last_updater': 866262, 'last_updater_username': 'dclong', 'name': '200308', 'repository': 1838633, 'full_size': 1482447679, 'v2': True}]

Get Token for Authentication

You need authentication to delete a tag from a Docker Image on DockerHub.

res = requests.post(
    url="https://hub.docker.com/v2/users/login/",
    data={"username": "YOUR_USER_NAME", "password": "YOUR_PASSWORD"},
)

Once the above POST comamnd is executed successfully, the token can be extracted using the following statement.

res.json()["token"]

Deleting a Tag of a Docker Image

The example below delete the tag 200302 from the Docker image dclong/jupyterhub-ds.

url = "https://hub.docker.com/v2/repositories/dclong/jupyterhub-ds/tags/200302/"
requests.delete(
    url,
    headers={
        "Content-Type": "application/json",
        "Authorization": f"JWT {res.json()['token']}",
    },
)
<Response [204]>