0Pricing
AI Agents · Pelajaran

Sandbox Agen Berbasis Docker

Menjalankan kontainer sekali pakai untuk eksekusi kode yang dibuat agen.

Sandbox Agen Berbasis Docker adalah pelajaran AI Agents gratis di CoddyKit. Ini adalah pelajaran 1 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar AI Agents, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus AI Agents mencakup 4 pelajaran total.

Mengapa Agen Memerlukan Lingkungan Terisolasi

Saat agen menjalankan kode yang ditulis oleh LLM, kode tersebut tidak tepercaya. Kode itu dapat mencoba membaca file sensitif, membuat koneksi keluar, atau menggunakan sumber daya tanpa batas.

Lingkungan terisolasi memisahkan eksekusi kode sehingga dampaknya tetap terbatas, apa pun yang dilakukan kode tersebut.

Docker sebagai Lapisan Isolasi

Kontainer Docker menyediakan isolasi tingkat OS yang ringan. Setiap potongan kode berjalan di dalam kontainer baru dengan batas sumber daya dan pembatasan jaringan yang ditentukan secara eksplisit.

SDK Python docker memungkinkan Anda memulai dan menghapus kontainer secara terprogram dari dalam agen.

import docker

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

Menjalankan Kontainer Dasar

client.containers.run() memulai kontainer, menjalankan perintah, dan mengembalikan keluaran sebagai byte. Pengaturan auto_remove=True membersihkan kontainer setelah kontainer berhenti.

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'

Batas Memori dan CPU

Tanpa batas, skrip berbahaya dapat menghabiskan memori sistem induk. Teruskan mem_limit dan nano_cpus untuk membatasi penggunaan sumber daya.

Jika proses melebihi mem_limit, kontainer dihentikan oleh OOM dan pengecualian akan muncul.

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

Menonaktifkan Jaringan

Pengaturan network_disabled=True mencegah kontainer melakukan panggilan jaringan keluar atau masuk — bahkan pencarian DNS pun gagal. Hal ini menghentikan pengiriman data tanpa izin dan panggilan balik ke server pengendali.

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

Batas Waktu Eksekusi

Perulangan tak terbatas di dalam lingkungan terisolasi dapat memblokir agen Anda selamanya. Teruskan timeout dalam satuan detik ke containers.run() agar Docker mematikan kontainer setelah batas waktu tercapai.

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}')

Fungsi Pembantu Lengkap untuk Lingkungan Terisolasi

Membungkus semua pengaturan ke dalam fungsi yang dapat digunakan kembali memudahkan pemanggilannya dari alat agen. Kembalikan keluaran standar dan penanda status agar agen dapat menangani kegagalan.

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)}

Memasang Ruang Kerja Sementara

Jika kode perlu membaca berkas masukan atau menulis berkas keluaran, pasang direktori sementara dari sistem induk ke dalam kontainer. Gunakan volumes dengan mode 'rw' hanya untuk ruang kerja dan jangan memasang yang lain.

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())

Sistem Berkas Hanya-Baca

Atur read_only=True untuk memasang sistem berkas akar kontainer sebagai hanya-baca. Kode hanya dapat menulis ke volume yang dipasang secara eksplisit. Hal ini mencegah penulisan ke /etc, /usr, atau jalur sensitif lainnya di dalam citra.

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'

Mengintegrasikan Lingkungan Terisolasi ke Alat Agen

Daftarkan pelaksana lingkungan terisolasi sebagai alat yang dapat dipanggil oleh LLM. Agen menghasilkan kode, alat menjalankannya secara terisolasi, lalu keluarannya diteruskan ke langkah penalaran berikutnya.

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'])

Penanganan Galat dan Pembersihan

Kontainer dapat gagal dimulai jika layanan Docker tidak berjalan atau jika citra belum tersedia secara lokal. Selalu tangani docker.errors.DockerException dan pastikan kontainer dibersihkan bahkan saat terjadi pengecualian.

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)}

Pengaturan lingkungan terisolasi apa yang paling penting untuk mencegah eksfiltrasi data?

Lingkungan terisolasi agen harus mencegah kode yang dijalankan mengirim data curian ke server eksternal. Parameter Docker mana yang secara langsung memblokir akses jaringan keluar?

Ringkasan Lingkungan Terisolasi Docker

Lingkungan terisolasi berbasis Docker menyediakan lingkungan eksekusi yang aman dengan menggabungkan batas memori dan CPU, isolasi jaringan, batas waktu eksekusi, dan sistem berkas hanya-baca.

Bungkus pengaturan ini dalam pembantu yang dapat digunakan kembali, lalu sediakan sebagai alat agen agar LLM dapat menjalankan kode yang dihasilkan dengan aman tanpa membahayakan sistem induk.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Sandbox Agen Berbasis Docker” gratis?

Ya — teks lengkap “Sandbox Agen Berbasis Docker” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus AI Agents, upgrade ke CoddyKit PRO. Kursus AI Agents mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Sandbox Agen Berbasis Docker”?

Menjalankan kontainer sekali pakai untuk eksekusi kode yang dibuat agen. Kamu berlatih AI Agents dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai AI Agents?

Tidak diperlukan pengalaman sebelumnya. AI Agents di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 1 dari 4.

Berapa lama pelajaran “Sandbox Agen Berbasis Docker” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran AI Agents ini?

Ya. Setiap pelajaran AI Agents menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Sandbox Agen Berbasis Docker
  2. Isolasi VM untuk Agen Kode dengan Keamanan Tinggi
  3. Layanan Sandbox E2B dan Cloud
  4. Kebijakan Keamanan untuk Eksekusi Kode
← Kembali ke AI Agents