Skip to main content
"""
Docker Tools
=============================

Demonstrates docker tools.
"""

import sys

from agno.agent import Agent

# ---------------------------------------------------------------------------
# Create Agent
# ---------------------------------------------------------------------------


# ---------------------------------------------------------------------------
# Run Agent
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    try:
        from agno.tools.docker import DockerTools

        # Example 1: Include specific Docker functions for container management
        container_tools = DockerTools(
            include_tools=[
                "list_containers",
                "start_container",
                "stop_container",
                "get_container_logs",
                "inspect_container",
            ]
        )

        # Example 2: Exclude dangerous functions (like remove operations)
        safe_docker_tools = DockerTools(
            exclude_tools=[
                "remove_container",
                "remove_image",
                "remove_volume",
                "remove_network",
            ]
        )

        # Example 3: Include all functions (default behavior)
        full_docker_tools = DockerTools()

        # Create agents with different tool configurations
        container_agent = Agent(
            name="Docker Container Agent",
            instructions=[
                "You are a Docker container management assistant.",
                "You can list, start, stop, and inspect containers.",
            ],
            tools=[container_tools],
            markdown=True,
        )

        safe_agent = Agent(
            name="Safe Docker Agent",
            instructions=[
                "You are a Docker management assistant with safe operations only.",
                "You can view and manage Docker resources but cannot delete them.",
            ],
            tools=[safe_docker_tools],
            markdown=True,
        )

        docker_agent = Agent(
            name="Full Docker Agent",
            instructions=[
                "You are a comprehensive Docker management assistant.",
                "You can manage containers, images, volumes, and networks.",
            ],
            tools=[full_docker_tools],
            markdown=True,
        )

        # Example 1: List running containers
        docker_agent.print_response("List all running Docker containers", stream=True)

        # Example 2: List all images
        docker_agent.print_response(
            "List all Docker images on this system", stream=True
        )

        # Example 3: Pull an image
        docker_agent.print_response("Pull the latest nginx image", stream=True)

        # Example 4: Run a container
        docker_agent.print_response(
            "Run an nginx container named 'web-server' on port 8080", stream=True
        )

        # Example 5: Get container logs
        docker_agent.print_response(
            "Get logs from the 'web-server' container", stream=True
        )

        # # Example 6: List volumes
        docker_agent.print_response("List all Docker volumes", stream=True)

        # Example 7: Create a network
        docker_agent.print_response(
            "Create a new Docker network called 'test-network'", stream=True
        )

        # Example 8: Stop and remove container
        docker_agent.print_response(
            "Stop and remove the 'web-server' container", stream=True
        )

        # Example 9: Inspect an image
        docker_agent.print_response("Inspect the nginx image", stream=True)

        # # Example 10: Build an image (uncomment and modify path as needed)
        # docker_agent.print_response(
        #     "Build a Docker image from the Dockerfile in ./app with tag 'myapp:latest'",
        #     stream=True
        # )

    except ValueError as e:
        print(f"\n[ERROR] Docker Tool Error: {e}")
        print("\nTroubleshooting steps:")

        if sys.platform == "darwin":  # macOS
            print("1. Ensure Docker Desktop is running")
            print("2. Check Docker Desktop settings")
            print("3. Try running 'docker ps' in terminal to verify access")

        elif sys.platform == "linux":
            print("1. Check if Docker service is running:")
            print("   systemctl status docker")
            print("2. Make sure your user has permissions to access Docker:")
            print("   sudo usermod -aG docker $USER")

        elif sys.platform == "win32":
            print("1. Ensure Docker Desktop is running")
            print("2. Check Docker Desktop settings")

Run the Example

# Clone and setup repo
git clone https://github.com/agno-agi/agno.git
cd agno/cookbook/91_tools

# Create and activate virtual environment
./scripts/demo_setup.sh
source .venvs/demo/bin/activate

python docker_tools.py