Untitled

 avatar
unknown
python
9 days ago
3.3 kB
2
Indexable
import docker
import pprint


def get_containers():
    client = docker.from_env()
    containers = client.containers.list(all=True)
    container_dict = {container.name: container.short_id for container in containers}
    return container_dict


def remove_container(container_id):
    client = docker.from_env()

    try:
        container = client.containers.get(container_id)
        container.remove(force=True)
    except docker.errors.NotFound:
        return f"Error: Container matchin '{container_id}' name not found."


def remove_all_containers():
    client = docker.from_env()
    containers = client.containers.list(all=True)

    for container in containers:
        container.remove(force=True)


def get_container_logs(container_name, tail="all"):
    client = docker.from_env()

    try:
        container = client.containers.get(container_name)
        logs = container.logs(timestamps=True, tail=tail).decode("utf-8").splitlines()
        return logs
    except docker.errors.NotFound:
        return f"Error: Container '{container_name}' not found."
    except docker.errors.APIError as e:
        return f"Error: {e}"

def start_container(container_name):
    # TODO: Extend to reacher API 
    client = docker.from_env()

    try:
        container = client.containers.get(container_name)
        container.start()
        return f"Container '{container_name}' started."
    except docker.errors.NotFound:
        return f"Error: Container '{container_name}' not found."
    except docker.errors.APIError as e:
        return f"Error: {e}"
    

def stop_container(container_name):
    client = docker.from_env()

    try:
        container = client.containers.get(container_name)
        container.stop()
        return f"Container '{container_name}' stopped."
    except docker.errors.NotFound:
        return f"Error: Container '{container_name}' not found."



# ----------------- Execute in Container Method -----------------

def execute_command_in_container(self, container_name, command):
    """Execute a command inside a running container."""
    container = self.client.containers.get(container_name)
    
    # Execute the command and get output
    exit_code, output = container.exec_run(command)
    
    if exit_code != 0:
        raise Exception(f"Command failed with exit code {exit_code}")
    
    return output.decode("utf-8")


# ----------------- DockerContainer Class -----------------

class DockerContainer:
    def __init__(self, image, name, command=None, detach=True, ports=None, environment=None):
        self.client = docker.from_env()
        self.image = image
        self.name = name
        self.command = command
        self.detach = detach
        self.ports = ports
        self.environment = environment

    def run_container(self):
        try:
            container = self.client.containers.run(
                image=self.image,
                name=self.name,
                command=self.command,
                detach=self.detach,
                ports=self.ports,
                environment=self.environment
            )
            return container.short_id
        except docker.errors.APIError as e:
            return f"Error: {e}"

# ----------------- DockerContainer Class -----------------

pprint.pprint(get_containers())
Leave a Comment