import docker import argparse # Initialize the Docker client client = docker.from_env() # Function to get the size of a Docker volume def get_volume_size(container_id, volume_name): inspect_data = client.api.inspect_container(container_id) mounts = inspect_data['Mounts'] for mount in mounts: if mount['Destination'] == volume_name: print(mount) return int(mount.get('Size',0)) # Function to shutdown a Docker container def shutdown_container(container_id): client.api.stop(container_id) # Define the threshold size in bytes threshold_size = 1000000000 # 1GB # Parse command-line arguments parser = argparse.ArgumentParser(description='Check volume sizes of Docker containers and shutdown if size exceeds threshold.') parser.add_argument('--dry-run', action='store_true', help='Perform a dry run without actually shutting down containers.') args = parser.parse_args() # Get a list of all running containers containers = client.containers.list() # Iterate through each container and check the size of its volumes for container in containers: container_id = container.id print("Found container {}".format(container_id)) inspect_data = client.api.inspect_container(container_id) mounts = inspect_data['Mounts'] print("Found mounts {}".format(mounts)) # Check the size of each volume and shutdown the container if any volume exceeds the threshold for mount in mounts: volume_name = mount['Destination'] volume_size = get_volume_size(container_id, volume_name) if volume_size > threshold_size: if not args.dry_run: shutdown_container(container_id) print(f"Container {container_id} has been shutdown due to volume {volume_name} exceeding the threshold size.") else: print(f"Dry run: Container {container_id} would be shutdown due to volume {volume_name} exceeding the threshold size.")