Agent-sandboxen op basis van Docker
Wegwerpcontainers starten voor het uitvoeren van door agents gegenereerde code.
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-killedHet 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 unreachableTime-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.
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
- Agent-sandboxen op basis van Docker
- VM-isolatie voor zeer veilige codeagents
- E2B- en cloud-sandboxdiensten
- Beveiligingsbeleid voor code-uitvoering