Oxcart Скачать
Меню

Сети контейнеров на Mac: порты, VPN, DNS, Little Snitch и TLS

На Mac контейнеры работают в Linux за сетью Mac, поэтому порты, VPN, DNS и межсетевые экраны зависят от того, как приложение передаёт трафик. Oxcart открывает каждое исходящее соединение на самом Mac, поэтому правила VPN, DNS и Little Snitch действуют и для контейнеров, а канал между Mac и движком шифруется с помощью TLS 1.3.

Обновлено

Как работают сети контейнеров на Mac

macOS не может запускать Linux-контейнеры напрямую, поэтому каждое контейнерное приложение на Mac запускает их в Linux и передаёт трафик между ним и Mac. Важны три пути:

  • Входящий трафик: опубликованный порт на Mac перенаправляет соединение в контейнер.
  • Исходящий трафик: контейнер открывает соединение с интернетом, корпоративной сетью или сервисом на Mac.
  • Имена: контейнер разрешает имя хоста.

Когда эти пути обходят собственную сеть Mac, маршруты VPN не действуют, внутренние имена хостов не разрешаются, а межсетевой экран не видит, какое приложение обменивается данными. Oxcart устроен так, чтобы этого не происходило.

Исходящий трафик: VPN, DNS и межсетевой экран продолжают действовать

Oxcart перенаправляет исходящий TCP из контейнеров и шагов сборки, IPv4 и IPv6, на Mac, который открывает соединение своими сокетами. Таблица маршрутизации Mac определяет путь, включая маршруты, установленные VPN-клиентом. Oxcart не меняет маршруты Mac, настройки VPN или межсетевого экрана.

Запросы адресов (A и AAAA) используют системный резолвер macOS, включая /etc/hosts и выбор резолвера, настроенный VPN, поэтому корпоративные имена разрешаются в контейнерах так же, как в браузере. Имена контейнеров остаются в пределах своих сетей Docker, а DNS работает по UDP и TCP.

Little Snitch, LuLu и агенты защиты конечных устройств

Сетевой фильтр часто задерживает первое соединение новой программы примерно на две секунды, пока спрашивает вас. Oxcart этого не ждёт: соединения идут по резервному пути, пока основной канал не проверен; медленное или неудачное соединение автоматически переходит на резервный путь, а три сбоя подряд отключают канал на 30 секунд до новой проверки. Разрешите Oxcart в фильтре один раз, и дальше будут действовать его правила.

Входящий трафик: опубликованные порты

Публикуйте порты с обычным синтаксисом Docker:

# Mac loopback only (recommended for development)
docker run -d -p 127.0.0.1:8080:80 nginx

# Ephemeral host port, UDP
docker run -d -p 127.0.0.1::9000/udp my-udp-service

# IPv4 and IPv6 listeners on the Mac
docker run -d -p "[::]:8080:80" nginx

Привязка без адреса слушает на всех IPv4-адресах Mac, поэтому доступна другим машинам в сети, если межсетевой экран macOS их не блокирует. TCP и UDP могут использовать один номер порта хоста. Опубликованные слушающие сокеты освобождаются при остановке контейнера.

Опубликованные порты также отвечают на localhost самого движка, поэтому реестр в контейнере работает как цель для push:

docker run -d -p 127.0.0.1:5000:5000 --name registry registry:2
docker tag my-app localhost:5000/my-app
docker push localhost:5000/my-app

Раздел Ports: почему порт не отвечает

Раздел Ports в Oxcart показывает все слушающие сокеты на Mac и все порты контейнеров, сгруппированные по репозиторию, рабочему дереву и ветке, чтобы две копии одного проекта не смешивались. У каждой привязки есть состояние готово, ожидание или ошибка с причиной:

  • адрес уже занят на Mac;
  • сервер внутри контейнера слушает только на 127.0.0.1;
  • на этом порту пока ничто не слушает.

Порты, доступные другим машинам, отмечены. Агент программирования видит те же данные через MCP-инструмент Oxcart ports; см. Docker для ИИ-агентов программирования.

Доступ к Mac из контейнера

host.docker.internal разрешается в контейнерах и шагах сборки и даёт доступ по TCP к сервисам на 127.0.0.1 Mac. Направьте контейнер на базу данных или сервер разработки, работающий нативно на Mac:

docker run --rm curlimages/curl http://host.docker.internal:3000/health

Считайте это намеренно открытым доступом: любой запущенный контейнер может так обращаться к сервисам на loopback Mac, поэтому не оставляйте административные сервисы без аутентификации на 127.0.0.1, пока запускаете контейнеры, которым не доверяете.

Зашифрованный канал между Mac и движком

Трафик между Mac и Linux проходит через виртуальную сеть, которую macOS разделяет с другими средствами виртуализации на том же Mac. Oxcart передаёт опубликованный и исходящий TCP по этому каналу внутри TLS 1.3 (TLS_AES_128_GCM_SHA256), с привязкой к сертификату, заново создаваемому при каждом запуске движка, и новым 256-битным bearer-токеном на каждый запуск. Неверный токен закрывает соединение, а сторона Linux закрывает соединения не с адреса Mac ещё до начала TLS.

От чего это защищает: другое ПО в общей сети может подменять адреса, чтобы читать или внедрять трафик либо открывать новые соединения с контейнерами. Межсетевой экран гостевой системы также закрывает ему доступ к неопубликованным портам контейнеров и внутреннему резолверу. Шифрование на этом канале имеет цену, и мы сознательно её приняли. Сам API Docker никогда не передаётся по сети: это частный Unix-сокет, а без опубликованных портов Oxcart не держит TCP- или UDP-сокетов на Mac.

Текущие ограничения

  • Сетевой режим host (--network host) и IPv6-сети контейнеров не реализованы; контейнеры имеют IPv4-адреса.
  • host.docker.internal передаёт TCP; UDP к шлюзу хоста не реализован.
  • Опубликованные TCP и UDP не сохраняют адрес клиента: контейнер видит стороной соединения Linux.
  • DNS-записи не для адресов (например, SRV и TXT) используют резолверы DHCP сети вместо раздельного DNS macOS.

Устранение неполадок

Проблемы сетей контейнеров на Mac и их решения
СимптомВероятная причинаРешение
Отказ в соединении на localhost:PORTСервер слушает на 127.0.0.1 внутри контейнераСлушайте на 0.0.0.0; раздел Ports указывает на этот случай
"port is already allocated"Порт хоста занят другим процессом или контейнеромВыберите другой порт хоста; раздел Ports показывает владельца
Внутреннее имя хоста не разрешается в контейнереИмя есть только в DNS вашей VPNПодключите VPN на Mac; запросы адресов используют резолвер Mac
Контейнер не может обратиться к серверу разработки на MacИспользуется localhost внутри контейнераИспользуйте host.docker.internal
Первое скачивание замирает на пару секундСетевой фильтр спрашивает о новом соединенииРазрешите Oxcart один раз; тем временем соединения идут по резервному пути
Коллеги могут обращаться к вашему порту разработкиОпубликован без адресаПубликуйте на 127.0.0.1

Вопросы

Используют ли Docker-контейнеры на Mac мою VPN?

В Oxcart — да. Исходящие соединения контейнеров открывает сам Mac, поэтому на них действуют его маршруты, VPN, раздельный DNS для запросов адресов и межсетевой экран для приложений. Oxcart не меняет маршруты Mac, настройки VPN или межсетевого экрана.

Как обратиться к сервису на Mac из контейнера?

Используйте host.docker.internal. В Oxcart он даёт доступ по TCP к сервисам на 127.0.0.1 Mac из контейнеров и шагов сборки. --add-host mac:host-gateway задаёт другое имя для того же адреса.

Почему контейнер работает, но его порт недоступен?

Обычно сервер внутри контейнера слушает на 127.0.0.1, куда опубликованные порты не ведут; настройте прослушивание на 0.0.0.0. Другие причины — занятый порт хоста или пока отсутствующий слушатель. Раздел Ports в Oxcart показывает конкретную причину.

Работает ли Oxcart с Little Snitch и LuLu?

Да. Когда сетевой фильтр задерживает первое соединение Oxcart, пока спрашивает вас, соединения идут по резервному пути до проверки основного канала, поэтому ничего не ломается и не ждёт ответа. Медленное или неудачное соединение автоматически переходит на резервный путь.

Шифруется ли трафик контейнеров на моём Mac?

Опубликованный и исходящий TCP между Mac и движком Oxcart передаётся внутри TLS 1.3 с привязкой к сертификату, создаваемому при каждом запуске движка, и 256-битным токеном на запуск. Это защищает канал от других средств виртуализации в общей сети Mac. Трафик в интернет защищается средствами самого приложения, например HTTPS.

Видны ли мои опубликованные порты другим машинам в сети?

Порт, опубликованный без адреса, слушает на всех IPv4-адресах Mac, поэтому другие машины могут обращаться к нему, если их не блокирует межсетевой экран macOS. Публикуйте на 127.0.0.1, чтобы ограничить доступ своим Mac. Oxcart отмечает порты, доступные другим машинам.

Поддерживает ли Oxcart сеть host или IPv6 для контейнеров?

Нет. Сетевой режим host и IPv6-сети контейнеров не реализованы. У контейнеров IPv4-адреса; при этом порты можно публиковать на IPv6 через "[::]:8080:80".

Источники и методика

Описанное сетевое поведение проверено в Oxcart 10 октября 2026 года, включая исходящий TCP, DNS, опубликованные порты, доступ к хосту и TLS на канале между Mac и контейнерами.

Попробуйте Oxcart на своих проектах

Бесплатно на 60 дней. Затем $20 за пользователя и основную версию — без подписки.

Apple silicon · macOS 26 или новее

Читайте дальше

История версий

Oxcart 0.1.4

Последняя версия

Лицензирование и улучшения.

  • Активация лицензии по защищённой ссылке из электронного письма.
  • Управление лицензией и компьютерами Mac из Settings.
  • Проверка лицензии без интернета.
  • Повышение производительности, доработка интерфейса и исправление ошибок.

Требуется macOS 26.0 или новее

Oxcart 0.1.3

Освобождение памяти при простое.

  • Освобождает память ВМ, когда нет работающих контейнеров.
  • Сохраняет контейнеры, образы, тома и сети.

Требуется macOS 26.0 или новее

Oxcart 0.1.2

Интеграция инструментов командной строки.

  • Переключайтесь между инструментами Docker из комплекта Oxcart и уже установленными.
  • Доработка интерфейса.

Требуется macOS 26.0 или новее

Oxcart 0.1.1

Инструменты Docker в комплекте и управление агентами.

  • В комплект входят Docker CLI 29.9, Compose 5.6 и Buildx 0.38.
  • Интеграция с контекстами Docker и безопасное хранение учётных данных в Связке ключей.
  • Подключение агентов через MCP с отдельными разрешениями и блокировкой для каждого агента.

Требуется macOS 26.0 или новее

Oxcart 0.1.0

Docker-совместимые контейнеры для Apple silicon.

  • Совместимость с Docker CLI, Compose и Buildx.
  • Настройка без интернета: компоненты среды выполнения входят в комплект.
  • Порты упорядочены по проектам и веткам Git.
  • Интеграция с MCP с доступом только для чтения по умолчанию.
  • Автоматические обновления с проверкой подлинности.

Требуется macOS 26.0 или новее