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

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

У меня проблема с докером и подключением изнутри контейнера к внешней сети (например, ping to google.com)

Я настроил новый хост (Ubuntu 18.04) и установил докер. Я создал свой первый контейнер с docker run -it --rm busybox

** Когда я подключаюсь к этому контейнеру, я пытаюсь пинговать

tcpdump icmp -i docker0 дал такие результаты:

Внутренняя сеть:

12:37:38.306697 IP 172.17.0.2>ping-target: ICMP echo request, id 2560, seq 12, length 64
12:37:38.309111 IP ping-target>172.17.0.2: ICMP echo reply, id 2560, seq 12, length 64

Внешняя сеть:

12:37:48.590309 IP 172.17.0.2>dns.google: ICMP echo request, id 2816, seq 2, length 64
12:37:49.640603 IP host>172.17.0.2: ICMP host dns.google unreachable, length 92

tcpdump icmp -i br0 не дает никаких результатов при pinging external, но при pinging internal:

12:41:53.672256 IP host>ping-target: ICMP echo request, id 3328, seq 0, length 64
12:41:53.674789 IP ping-target>172.17.0.2: ICMP echo reply, id 3328, seq 0, length 64

Итак, я думаю, что мне что-то здесь не хватает.

См. Ниже вывод правил iptables и конфигурации системы. Дело в том, что у меня аналогичная установка на другом работающем хосте (более старая версия докера). Попытка перенести все правила iptables ничего не меняет. Вывод команд iptables похож на новую установку докера (за исключением одного правила маскарада).

Мне было интересно, почему я все еще вижу сетевые пакеты с адресом 172.17.0.2 при внутреннем пинге.

Выход iptables -L --line-numbers

Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
Chain FORWARD (policy DROP)
num  target     prot opt source               destination
1    DOCKER-USER  all  --  anywhere             anywhere
2    DOCKER-ISOLATION-STAGE-1  all  --  anywhere             anywhere
3    ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
4    DOCKER     all  --  anywhere             anywhere
5    ACCEPT     all  --  anywhere             anywhere
6    ACCEPT     all  --  anywhere             anywhere
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
Chain DOCKER (1 references)
num  target     prot opt source               destination
Chain DOCKER-ISOLATION-STAGE-1 (1 references)
num  target     prot opt source               destination
1    DOCKER-ISOLATION-STAGE-2  all  --  anywhere             anywhere
2    RETURN     all  --  anywhere             anywhere
Chain DOCKER-ISOLATION-STAGE-2 (1 references)
num  target     prot opt source               destination
1    DROP       all  --  anywhere             anywhere
2    RETURN     all  --  anywhere             anywhere
Chain DOCKER-USER (1 references)
num  target     prot opt source               destination
1    RETURN     all  --  anywhere             anywhere

Выход iptables -t nat -L --line-numbers

Chain PREROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    DOCKER     all  --  anywhere             anywhere             ADDRTYPE match dst-type LOCAL
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination
1    DOCKER     all  --  anywhere            !localhost/8          ADDRTYPE match dst-type LOCAL
Chain POSTROUTING (policy ACCEPT)
num  target     prot opt source               destination
1    MASQUERADE  all  --  172.17.0.0/16        anywhere
Chain DOCKER (2 references)
num  target     prot opt source               destination
1    RETURN     all  --  anywhere             anywhere

Системные конфигурации:

uname -a:
Linux host 4.15.0-37-generic #40~upboard06-Ubuntu SMP Wed Nov 27 11:29:44 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux 
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 18.04.4 LTS
Release:        18.04
Codename:       bionic
docker:
docker-ce 5:19.03.11~3-0~ubuntu-bionic amd64 Docker: the open-source application container engine
ip route:
default via 172.16.21.254 dev br0
default via 192.168.0.254 dev br0
169.254.111.0/24 dev br0 proto kernel scope link src 169.254.111.111
172.16.21.0/24 dev br0 proto kernel scope link src 172.16.21.150
172.17.0.0/16 dev docker0 proto kernel scope link src 172.17.0.1
192.168.0.0/24 dev br0 proto kernel scope link src 192.168.0.156

(У меня есть мостовое устройство с br0, br0: 1 и br0: 100, использующее разные IP-адреса, где br0 - это DHCP, но br0: 1 и br0: 100 - статические)

Есть идеи, как это исправить?

Жду возможности попробовать ваши идеи :)

BTW: Что нужно иметь в виду при попытке доступа к контейнеру из внешних источников?

Любая помощь приветствуется!

С уважением, Олаф