2

Это проблема, которую я пытаюсь решить в течение некоторого времени. Я перепробовал столько ресурсов, сколько мог, но у меня пока ничего не получалось. :/

Вот что я пытаюсь решить:
Я хочу иметь возможность развертывать контейнеры Docker и получать к ним доступ с компьютера, который находится в той же локальной сети. Это означает, что IP-адреса, которые Docker раздает контейнерам, должны быть доступны с клиентского компьютера в той же локальной сети, что и компьютер, на котором размещен Docker.

В идеале людям просто нужно добавить маршрут, который указывает на хост Docker в качестве шлюза для сети Docker, например:

client@lan$ sudo route add -net <docker-network>/<mask> gw <docker-host>

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

Я видел, что сетевые мосты помогают в этом, но я не мог заставить так работать.

Как вы получаете все это на работу?

3 ответа3

1

Если все, что вам нужно сделать, это убедиться, что приложения в контейнерах Docker доступны другим хостам в сети, проще всего установить режим сети Docker на хост:

docker run --net=host image/toRun:1.0

Это выставит порты в образе на IP-адрес хоста (убедитесь, что во избежание коллизий портов)

0

Добавление на клиентах маршрута для доступа к вашим контейнерам через хост должно работать до тех пор, пока вы включаете пересылку IPv4 на хосте Docker, используя:

sysctl -w net.ipv4.ip_forward=1

Однако следует помнить о последствиях для безопасности, поскольку без надлежащего брандмауэра это будет направлять трафик с любого интерфейса на любой интерфейс.

0

Это работает, если вы настраиваете DOCKER-USER для принятия трафика от "не адаптера моста" к "мостовому адаптеру", необязательно ограниченного протоколом и портом, подобным порту tcp 80 (-p tcp --dport 80). Эта цепочка вызывается из цепочки FORWARD в таблице filter и управляет пакетами, которые не предназначены для хоста (Docker), а маршрутизируются через него.

Затем маршрутизатор локальной сети должен быть настроен на статический маршрут для сети Docker, который будет маршрутизироваться через хост Docker, выступающий в качестве шлюза. Маршрутизатор может сделать три вещи с этой информацией:

  • Отправьте ICMP REDIRECT пакеты для трафика, предназначенного для контейнера.

  • Раздайте статический маршрут в аренду DHCP (опция 121)

  • Направляйте пакеты через хост Docker, но это приводит к асимметрии маршрута: клиент → маршрутизатор → хост → контейнер, тогда как ответы будут идти контейнер → хост → клиент.

Ни один из этих вариантов не кажется мне действительно привлекательным.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .