AI-agenten · Les

Agent-sandboxen op basis van Docker

Wegwerpcontainers starten voor het uitvoeren van door agents gegenereerde code.

Les 1 van 413 stappen

Agent-sandboxen op basis van Docker is een gratis AI-agenten-les op CoddyKit. Dit is les 1 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject AI-agenten. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus AI-agenten bevat in totaal 4 lessen.

Waarom agents sandboxen nodig hebben

Wanneer een agent code uitvoert die door een LLM is geschreven, is die code niet-vertrouwd. De code kan proberen gevoelige bestanden te lezen, uitgaande verbindingen tot stand te brengen of onbeperkte systeembronnen te gebruiken.

Een sandbox isoleert de uitvoering van code, zodat de schade beperkt blijft, ongeacht wat de code doet.

Docker als sandboxlaag

Docker-containers bieden lichtgewicht isolatie op besturingssysteemniveau. Elk codefragment draait in een nieuwe container met expliciete limieten voor systeembronnen en netwerkbeperkingen.

Met de docker-SDK voor Python kun je vanuit je agent programmatisch containers starten en verwijderen.

import docker

client = docker.from_env()
print(client.version()['Version'])

Een basiscontainer uitvoeren

client.containers.run() start een container, voert een opdracht uit en retourneert de uitvoer als bytes. Als je auto_remove=True instelt, wordt de container opgeruimd nadat deze is afgesloten.

import docker

client = docker.from_env()

output = client.containers.run(
    'python:3.12-slim',
    'python -c "print(2 + 2)"',
    auto_remove=True
)

print(output.decode())  # '4'

Limieten voor geheugen en CPU

Zonder limieten kan een ontspoord script het hostgeheugen volledig uitputten. Geef mem_limit en nano_cpus mee om het gebruik van hulpbronnen te beperken.

Als het proces mem_limit overschrijdt, wordt de container door OOM beëindigd en wordt er een uitzondering gegenereerd.

output = client.containers.run(
    'python:3.12-slim',
    'python -c "x = [0]*10**8"',   # tries to allocate ~800 MB
    mem_limit='256m',
    nano_cpus=1_000_000_000,        # 1 CPU
    auto_remove=True
)
# Raises docker.errors.ContainerError if OOM-killed

Het netwerk uitschakelen

Als je network_disabled=True instelt, kan de container geen uitgaande of inkomende netwerkverbindingen maken — zelfs DNS-zoekopdrachten mislukken. Dit voorkomt het wegsluizen van gegevens en terugbelverbindingen naar een server voor opdracht en besturing.

output = client.containers.run(
    'python:3.12-slim',
    'python -c "import urllib.request; urllib.request.urlopen(\"http://example.com\")"',
    network_disabled=True,
    auto_remove=True
)
# Raises ContainerError: network unreachable

Time-out voor uitvoering

Een oneindige lus in de sandbox zou je agent voor altijd blokkeren. Geef een timeout in seconden mee aan containers.run(), zodat Docker de container na het verstrijken van de tijdslimiet beëindigt.

import docker
from docker.errors import ContainerError

client = docker.from_env()

try:
    output = client.containers.run(
        'python:3.12-slim',
        'python -c "while True: pass"',
        mem_limit='256m',
        network_disabled=True,
        auto_remove=True,
        timeout=30
    )
except Exception as e:
    print(f'Sandbox timeout or error: {e}')

Volledige hulpfunctie voor de sandbox

Als je alle instellingen in een herbruikbare functie onderbrengt, kun je die gemakkelijk vanuit agenttools aanroepen. Retourneer zowel stdout als een statusindicator, zodat de agent op fouten kan reageren.

import docker

client = docker.from_env()

def run_in_sandbox(code: str, timeout: int = 30) -> dict:
    cmd = f'python -c "{code.replace(chr(34), chr(39))}"'
    try:
        out = client.containers.run(
            'python:3.12-slim',
            cmd,
            mem_limit='256m',
            nano_cpus=500_000_000,
            network_disabled=True,
            auto_remove=True,
            timeout=timeout
        )
        return {'success': True, 'output': out.decode()}
    except Exception as e:
        return {'success': False, 'error': str(e)}

Een tijdelijke werkruimte koppelen

Als de code invoerbestanden moet lezen of uitvoerbestanden moet schrijven, koppel je een tijdelijke map op de host aan de container. Gebruik volumes met de modus 'rw' voor de werkruimte en niets anders.

import tempfile, os

with tempfile.TemporaryDirectory() as tmpdir:
    # Write input data
    with open(os.path.join(tmpdir, 'data.txt'), 'w') as f:
        f.write('hello sandbox')

    output = client.containers.run(
        'python:3.12-slim',
        'python -c "print(open(\"/workspace/data.txt\").read())"',
        volumes={tmpdir: {'bind': '/workspace', 'mode': 'rw'}},
        mem_limit='256m',
        network_disabled=True,
        auto_remove=True
    )
    print(output.decode())

Alleen-lezenbestandssysteem

Stel read_only=True in om het hoofdbestandssysteem van de container als alleen-lezen te koppelen. De code kan alleen naar expliciet gekoppelde volumes schrijven. Dit voorkomt schrijfbewerkingen naar /etc, /usr of andere gevoelige paden in de containerimage.

import tempfile

with tempfile.TemporaryDirectory() as tmpdir:
    output = client.containers.run(
        'python:3.12-slim',
        'python -c "open(\"/output/result.txt\",\"w\").write(str(1+1))"',
        volumes={tmpdir: {'bind': '/output', 'mode': 'rw'}},
        read_only=True,
        mem_limit='256m',
        network_disabled=True,
        auto_remove=True
    )
    print(open(f'{tmpdir}/result.txt').read())  # '2'

Een sandbox in een agenttool integreren

Registreer de sandboxuitvoerder als een tool die de LLM kan aanroepen. De agent genereert code, de tool voert die geïsoleerd uit en de uitvoer stroomt terug naar de volgende redeneerstap.

tools = [
    {
        'type': 'function',
        'function': {
            'name': 'execute_python',
            'description': 'Run a Python snippet in an isolated Docker sandbox.',
            'parameters': {
                'type': 'object',
                'properties': {
                    'code': {'type': 'string', 'description': 'Python code to execute.'}
                },
                'required': ['code']
            }
        }
    }
]

def handle_tool_call(name, args):
    if name == 'execute_python':
        return run_in_sandbox(args['code'])

Fouten afhandelen en opruimen

Containers kunnen niet starten als de Docker-daemon niet actief is of als de image niet in de cache staat. Handel docker.errors.DockerException altijd af en zorg ervoor dat containers ook bij uitzonderingen worden opgeruimd.

from docker.errors import DockerException, ImageNotFound

def safe_run(code: str) -> dict:
    try:
        return run_in_sandbox(code)
    except ImageNotFound:
        # Pull the image first
        client.images.pull('python:3.12-slim')
        return run_in_sandbox(code)
    except DockerException as e:
        return {'success': False, 'error': f'Docker unavailable: {e}'}
    except Exception as e:
        return {'success': False, 'error': str(e)}

Welke sandboxinstelling is het belangrijkst om het weglekken van gegevens te voorkomen?

Een sandbox van een agent moet voorkomen dat de uitgevoerde code gestolen gegevens naar een externe server verzendt. Welke Docker-parameter blokkeert rechtstreeks uitgaand netwerkverkeer?

Samenvatting van de Docker-sandbox

Sandboxomgevingen op basis van Docker bieden agents een veilige uitvoeringsomgeving door limieten voor geheugen en CPU, netwerkisolatie, time-outs voor uitvoering en alleen-lezenbestandssystemen te combineren.

Bundel deze instellingen in een herbruikbare hulpfunctie en bied die aan als agenttool, zodat de LLM veilig gegenereerde code kan uitvoeren zonder risico voor het hostsysteem.

Gratis beginnen

Leer AI-agenten met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
60
Lessen
239

Veelgestelde vragen

Is de les “Agent-sandboxen op basis van Docker” gratis?

Ja — de volledige tekst van “Agent-sandboxen op basis van Docker” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus AI-agenten wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus AI-agenten bevat in totaal 4 lessen.

Wat leer ik in “Agent-sandboxen op basis van Docker”?

Wegwerpcontainers starten voor het uitvoeren van door agents gegenereerde code. Je oefent met AI-agenten door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met AI-agenten te beginnen?

Ervaring vooraf is niet nodig. AI-agenten op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 1 van 4.

Hoe lang duurt de les “Agent-sandboxen op basis van Docker”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over AI-agenten?

Ja. Elke les over AI-agenten bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Agent-sandboxen op basis van Docker
  2. VM-isolatie voor zeer veilige codeagents
  3. E2B- en cloud-sandboxdiensten
  4. Beveiligingsbeleid voor code-uitvoering
← Terug naar AI-agenten