SystemdDoctor
служба не работает docker сеть

Docker: правила брандмауэра конфликтуют с вашими

Docker создаёт правила преобразования адресов и пробрасывания портов при запуске. Перезапуск или очистка правил брандмауэра стирает их, и контейнеры теряют сеть, хотя демон работает.

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

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

  1. Правила очищены перезапуском брандмауэра

    Средства управления правилами при перезапуске сбрасывают всё, включая цепочки Docker. Демон об этом не знает.

  2. Управление правилами отключено в настройках демона

    При iptables: false в daemon.json Docker не создаёт правила вовсе. Это осознанный режим для тех, кто настраивает сеть сам.

  3. Порядок запуска брандмауэра и Docker

    Если брандмауэр стартует после демона, он стирает уже созданные правила при загрузке.

Диагностика

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

Есть ли правила преобразования адресов Docker.

sudo iptables -t nat -L -n | head -20

Работает ли сеть изнутри контейнера.

docker run --rm alpine ping -c1 1.1.1.1 2>&1 | tail -3

Решение

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

1. Правила очищены перезапуском брандмауэра
Почему происходит
Средства управления правилами при перезапуске сбрасывают всё, включая цепочки Docker. Демон об этом не знает.
Как проверить
Посмотрите наличие цепочек Docker.
sudo iptables -t nat -L DOCKER -n 2>/dev/null | head
sudo nft list ruleset 2>/dev/null | grep -c -i docker
Как исправить
Перезапустите демон Docker после перезапуска брандмауэра: он создаст правила заново.
sudo systemctl restart docker
2. Управление правилами отключено в настройках демона
Почему происходит
При iptables: false в daemon.json Docker не создаёт правила вовсе. Это осознанный режим для тех, кто настраивает сеть сам.
Как проверить
Посмотрите настройку.
sudo grep -i iptables /etc/docker/daemon.json 2>/dev/null
Как исправить
Либо включите управление обратно, либо настройте правила самостоятельно — но тогда проброс портов придётся описывать руками.
3. Порядок запуска брандмауэра и Docker
Почему происходит
Если брандмауэр стартует после демона, он стирает уже созданные правила при загрузке.
Как проверить
Посмотрите порядок служб.
systemctl list-dependencies --before docker.service --no-pager | head
systemctl is-enabled nftables ufw firewalld 2>/dev/null
Как исправить
Добавьте порядок в переопределении unit Docker: он должен стартовать после брандмауэра.
sudo systemctl edit docker   # [Unit]\nAfter=nftables.service

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

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

$ sudo systemctl restart nftables
$ docker run --rm alpine ping -c1 1.1.1.1
ping: sendto: Operation not permitted

$ sudo iptables -t nat -L DOCKER -n
iptables: No chain/target/match by that name.

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

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

Источники

  • Документация Docker: пакетная фильтрация документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено перезапуском nftables при работающих контейнерах.
    собственная проверка, systemd 255
    сверено 15 сентября 2026