0Pricing
AI Agents · Урок

Песочницы агентов на основе Docker

Запуск одноразовых контейнеров для выполнения кода, созданного агентом.

«Песочницы агентов на основе Docker» — бесплатный урок AI Agents на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения AI Agents, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс AI Agents содержит 4 уроков всего.

Зачем агентам нужны изолированные среды

Когда агент выполняет код, написанный LLM, этот код является непроверенным. Он может попытаться прочитать конфиденциальные файлы, установить исходящие соединения или потребить неограниченные ресурсы.

Изолированная среда отделяет выполнение кода, поэтому ущерб остается ограниченным независимо от действий кода.

Docker в качестве уровня изоляции

Контейнеры Docker обеспечивают легковесную изоляцию на уровне операционной системы. Каждый фрагмент кода выполняется в новом контейнере с явными ограничениями ресурсов и сетевыми ограничениями.

SDK Python docker позволяет программно создавать и уничтожать контейнеры непосредственно из агента.

import docker

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

Базовый запуск контейнера

client.containers.run() запускает контейнер, выполняет команду и возвращает вывод в виде байтов. Параметр auto_remove=True удаляет контейнер после завершения его работы.

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'

Ограничения памяти и CPU

Без ограничений вредоносный скрипт может исчерпать память хоста. Передайте параметры mem_limit и nano_cpus, чтобы ограничить использование ресурсов.

Если процесс превышает значение mem_limit, контейнер принудительно завершается из-за OOM, и возникает исключение.

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

Отключение сети

Параметр network_disabled=True не позволяет контейнеру выполнять исходящие или принимать входящие сетевые запросы — не выполняются даже DNS-запросы. Это предотвращает утечку данных и обратные подключения к командно-управляющему серверу.

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

Время ожидания выполнения

Бесконечный цикл внутри песочницы навсегда заблокирует Вашего агента. Передайте в containers.run() параметр timeout в секундах, чтобы Docker удалил контейнер после истечения заданного времени.

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

Полная вспомогательная функция песочницы

Объединение всех настроек в повторно используемую функцию упрощает ее вызов из инструментов агента. Возвращайте стандартный вывод и флаг состояния, чтобы агент мог реагировать на сбои.

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

Подключение временного рабочего пространства

Если коду нужно читать входные файлы или записывать выходные файлы, подключите временный каталог хоста к контейнеру. Используйте volumes с режимом 'rw' только для рабочего пространства и больше ни для чего.

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

Файловая система только для чтения

Установите read_only=True, чтобы подключить корневую файловую систему контейнера в режиме только для чтения. Код может записывать данные только в явно подключенные тома. Это предотвращает запись в /etc, /usr и другие важные пути внутри образа.

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'

Интеграция песочницы с инструментом агента

Зарегистрируйте средство запуска песочницы как инструмент, который может вызвать LLM. Агент генерирует код, инструмент выполняет его в изоляции, а вывод передается на следующий шаг рассуждения.

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

Обработка ошибок и очистка

Контейнеры могут не запуститься, если демон Docker не работает или образ не кэширован. Всегда обрабатывайте docker.errors.DockerException и обеспечивайте удаление контейнеров даже при возникновении исключений.

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

Какая настройка песочницы наиболее важна для предотвращения утечки данных?

Песочница агента должна не позволять выполняемому коду отправлять украденные данные на внешний сервер. Какой параметр Docker напрямую блокирует исходящий сетевой доступ?

Итоги по песочницам Docker

Песочницы на основе Docker предоставляют агентам безопасную среду выполнения, объединяя ограничения памяти и CPU, изоляцию сети, ограничения времени выполнения и файловые системы только для чтения.

Объедините эти настройки в повторно используемую вспомогательную функцию и предоставьте ее как инструмент агента, чтобы LLM могла безопасно выполнять сгенерированный код без риска для системы хоста.

Часто задаваемые вопросы

Урок «Песочницы агентов на основе Docker» бесплатный?

Да — полный текст урока «Песочницы агентов на основе Docker» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс AI Agents, подпишись на CoddyKit PRO. Курс AI Agents содержит 4 уроков всего.

Чему я научусь в уроке «Песочницы агентов на основе Docker»?

Запуск одноразовых контейнеров для выполнения кода, созданного агентом. Ты практикуешь AI Agents с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать AI Agents?

Предыдущий опыт не требуется. AI Agents на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Песочницы агентов на основе Docker»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке AI Agents?

Да. Каждый урок AI Agents включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Песочницы агентов на основе Docker
  2. Изоляция в VM для защищённых агентов, работающих с кодом
  3. E2B и облачные сервисы песочниц
  4. Политики безопасности для выполнения кода
← Назад к AI Agents