Назад | Перейти на главную страницу

Контейнеры Docker не имеют доступа к Интернету до перезапуска службы Docker

Я создаю мост вручную с помощью этой команды:

docker network create --driver bridge --internal --subnet=172.20.0.0/24 br0

Затем я запускаю контейнеры, используя этот параметр моста --net=br0 --ip=172.20.0.x.

Проблема в том, что у этих контейнеров нет доступа к Интернету, я даже не могу пинговать снаружи.

Настоящая проблема связана с iptables. Когда я перезагружаю сервер, iptables показывает мне некоторые правила, а у контейнеров нет доступа в Интернет.

Но когда я перезапускаю службу докеров, iptables имеет другие правила, а контейнеры ДОЛЖНЫ иметь доступ в Интернет.

Я вставлю здесь только различия между набором правил.

Когда я перезагружаю сервер, появляются следующие правила:

*filter
-A DOCKER-ISOLATION ! -s 172.20.0.0/24 -o br-aa4c507d3f06 -j DROP
-A DOCKER-ISOLATION ! -d 172.20.0.0/24 -i br-aa4c507d3f06 -j DROP
COMMIT

Когда я перезапускаю службу Docker, эти 2 правила исчезают, и вместо этого я вижу следующее:

*filter
-A FORWARD -o br-aa4c507d3f06 -j DOCKER
-A FORWARD -o br-aa4c507d3f06 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i br-aa4c507d3f06 ! -o br-aa4c507d3f06 -j ACCEPT
-A FORWARD -i br-aa4c507d3f06 -o br-aa4c507d3f06 -j ACCEPT

-A DOCKER-ISOLATION -i br-aa4c507d3f06 -o docker0 -j DROP
-A DOCKER-ISOLATION -i docker0 -o br-aa4c507d3f06 -j DROP
COMMIT

&

*nat
-A POSTROUTING -s 172.20.0.0/24 ! -o br-aa4c507d3f06 -j MASQUERADE
-A DOCKER -i br-aa4c507d3f06 -j RETURN
COMMIT

Итак, добавление их вручную, вероятно, плохая идея, и я хотел бы, чтобы это работало так, как должно.

Почему мне нужно перезапустить службу докеров только для того, чтобы загрузить правила iptables, которые позволяют контейнерам использовать Интернет?

Как я могу это исправить?

Создание моста должно изменить правила iptables, и мне не нужно перезапускать службу Docker только для этого, верно?


РЕДАКТИРОВАТЬ:

Я заметил, что создание моста ТОЛЬКО добавляет эти правила в iptables:

-A DOCKER-ISOLATION ! -s 172.20.0.0/24 -o br-aa4c507d3f06 -j DROP
-A DOCKER-ISOLATION ! -d 172.20.0.0/24 -i br-aa4c507d3f06 -j DROP

Так, похоже, после создания моста мне нужно перезапустить докер? Зачем?

Виноват. Я не заметил, что использовал --internal. Понятно!