---
title: "Доступ к сервису на localhost Mac из контейнера Docker · Руководства Kilobat"
url: "https://kilobat.app/ru/guides/localhost-from-container.html"
description: "Внутри контейнера localhost — это сам контейнер. Чтобы обратиться к базе данных, API или серверу модели на вашем Mac, используйте host.docker.internal."
---

Разработчикам

# Контейнер не может подключиться к localhost на Mac

У каждого контейнера свой сетевой стек. В контейнере `localhost` — это сам контейнер, а не Mac.

Относится к: Docker Desktop и OrbStack в актуальных версиях macOS. · Проверено: 29 октября 2026 г.

## Симптомы

- Приложение в контейнере получает ошибку «connection refused» на `localhost:5432` или похожем порту.
- Тот же URL открывается в Safari или Терминале на Mac.
- Сервер модели или API на Mac недоступен из dev-контейнера.

## Вероятные причины

- **localhost указывает на контейнер.** Контейнер ищет сервис в собственном сетевом стеке, а там никто не слушает порт.
- **Адрес хоста меняется.** В документации Docker сказано, что IP-адрес хоста меняется, и вместо него предлагается специальное имя хоста.
- **Брандмауэр на Mac.** Брандмауэр macOS или другое приложение-брандмауэр может блокировать входящие подключения к сервису.

## Как проверить

1. Убедитесь, что сервис работает на Mac. Замените 8000 на свой порт.

   ```
   curl http://localhost:8000
   ```
2. Посмотрите, на каком адресе слушает сервис на Mac.

   ```
   lsof -nP -iTCP:8000 -sTCP:LISTEN
   ```

   Вывод `*:8000` — все адреса. `127.0.0.1:8000` — только петлевой адрес (loopback).
3. Проверьте имя хоста изнутри контейнера, если в образе есть wget.

   ```
   docker exec my-container wget -qO- http://host.docker.internal:8000
   ```

## Как исправить

1. В контейнере используйте `host.docker.internal` вместо `localhost`. Это имя поддерживают и Docker Desktop, и OrbStack.
2. Укажите адрес в конфигурации приложения, например в переменной окружения.

   ```
   docker run -e API_URL=http://host.docker.internal:8000 my-image
   ```
3. В OrbStack можно вместо этого включить сеть хоста. Тогда сервисы Mac доступны в контейнере на `localhost`.

   ```
   docker run --net host my-image
   ```
4. Если подключиться всё равно не удаётся, проверьте настройки брандмауэра macOS. См. [Брандмауэр macOS блокирует входящие подключения](https://kilobat.app/ru/guides/macos-firewall-incoming.html).

## С Kilobat

1. Проверки Kilobat выполняются на Mac, а не в контейнере. Добавьте `--context container`, чтобы получить команду для запуска в контейнере.

   ```
   kilobat why http://localhost:8000 --context container
   ```
2. Если к вашему Mac обращается сервис в интернете, используйте `--context provider`. Тогда Kilobat сообщит, что localhost — частный адрес и проверить его он не может.

   ```
   kilobat why http://localhost:8000 --context provider
   ```

## Вопросы

**host.docker.internal работает и в Linux?**

Эта страница о Mac. В Docker Desktop для Mac и в OrbStack это имя указывает на хост.

**Почему Safari видит сервис, а контейнер — нет?**

Safari работает на Mac, поэтому localhost для него — это Mac. У контейнера свой localhost.

## Источники

- [Документация Docker: Explore networking how-tos on Docker Desktop](https://docs.docker.com/desktop/features/networking/networking-how-tos/)
- [Документация OrbStack: Container networking](https://docs.orbstack.dev/docker/network)
- [Документация OrbStack: Host networking](https://docs.orbstack.dev/docker/host-networking)
- lsof(8), man-страница из macOS 27.2

Источники проверены 29 октября 2026 г. Man-страницы — те, что установлены вместе с macOS; откройте любую командой `man <name>` в Терминале.

## Похожие руководства

- [Не удаётся подключиться к контейнеру Docker с Mac](https://kilobat.app/ru/guides/docker-container-from-mac.html): Docker на Mac запускает контейнеры в виртуальной машине Linux.
- [Брандмауэр macOS блокирует входящие подключения](https://kilobat.app/ru/guides/macos-firewall-incoming.html): Брандмауэр macOS управляет подключениями, которые другие компьютеры устанавливают с вашим Mac.
- [Почему не подключается один сайт или API](https://kilobat.app/ru/guides/recipes/why-cant-it-connect.html): Когда интернет работает, а один адрес — нет, Kilobat проверяет уровни по очереди.
- [Порт уже занят на Mac](https://kilobat.app/ru/guides/port-already-in-use.html): Слушать TCP-порт на одном адресе может только один процесс.
