SystemdDoctor
служба не работает сеть контейнеры порты

Порт занят, но процесса не видно

Если порт занят, а владельца найти не удаётся, почти всегда дело в сетевом пространстве имён: процесс работает в контейнере или в изолированной службе, и обычный просмотр соединений его не видит.

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

По порядку: сверху то, что встречается чаще.

  1. Порт держит контейнер

    Проброс порта контейнера выглядит в системе как процесс среды исполнения, а не как ваша служба. Иногда владельцем оказывается процесс пробрасывания портов.

  2. Порт держит сокет systemd

    При сокет-активации адрес открыт менеджером. В выводе виден процесс systemd, и это сбивает с толку.

  3. Процесс в другом сетевом пространстве имён

    Служба с PrivateNetwork=yes или процесс в пространстве имён контейнера не виден обычными средствами хоста.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Владелец порта: без прав root имя процесса не показывается.

sudo ss -tlnp | grep :ПОРТ

Сетевые пространства имён на машине.

sudo lsns -t net

Адреса, которые держит сам systemd.

systemctl list-sockets --no-pager

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Порт держит контейнер
Почему происходит
Проброс порта контейнера выглядит в системе как процесс среды исполнения, а не как ваша служба. Иногда владельцем оказывается процесс пробрасывания портов.
Как проверить
Посмотрите владельца порта и контейнеры.
sudo ss -tlnp | grep :8080
docker ps --format "{{.Names}} {{.Ports}}" 2>/dev/null | head
Как исправить
Освободите порт в описании контейнера или выберите другой для службы.
2. Порт держит сокет systemd
Почему происходит
При сокет-активации адрес открыт менеджером. В выводе виден процесс systemd, и это сбивает с толку.
Как проверить
Посмотрите активные сокеты.
systemctl list-sockets --no-pager | grep 8080
Как исправить
Остановите сокет или откажитесь от самостоятельной привязки в службе.
3. Процесс в другом сетевом пространстве имён
Почему происходит
Служба с PrivateNetwork=yes или процесс в пространстве имён контейнера не виден обычными средствами хоста.
Как проверить
Посмотрите пространства имён и соединения в них.
sudo lsns -t net | head
sudo ss -tlnp -N $(pgrep -o myapp) 2>/dev/null | head
Как исправить
Смотрите соединения внутри нужного пространства имён. Для служб проверьте параметры сетевой изоляции.

Пример вывода

Порт держит процесс пробрасывания портов контейнера. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

$ sudo ss -tlnp | grep :8080
LISTEN 0 4096 0.0.0.0:8080 0.0.0.0:* users:(("docker-proxy",pid=2100,fd=4))

myapp[4400]: fatal: listen tcp :8080: bind: address already in use

Связанные ошибки

Где встречается чаще всего

Источники

  • ss(8)
    Просмотр соединений и ключи для пространств имён.
    официальная документация, systemd 255
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено пробросом порта контейнера на тот же порт, что у службы.
    собственная проверка, systemd 255
    сверено 15 сентября 2026