После того, как `docker -compose.yml` использует сетевой ipv4, идентичный IP-адресу WiFi, почему некоторые веб-сайты недоступны? - PullRequest
0 голосов
/ 06 мая 2020

Контекст : я использую docker-compose.yml для настройки контейнера для mongoDB, где сеть настраивается следующим образом:

...
services:
    mongo:
        networks:
            mongodb_net:
                ipv4_address: 192.168.178.23
networks:
    mongodb_net:
        ipam:
            config:
                - subnet: 192.168.178.0/24
...

, что в точности совпадает с IP-адресом моего WiFi-соединения.

Вопрос :

Почему после указанной выше настройки некоторые веб-сайты больше не доступны (например, PING не возвращает никаких пакетов) в моем браузере?

Я попытался изменить YAML-файл на другой IP-адрес, проблема решена. Но я хочу понять, в чем была причина. Это потому, что служба docker занимает тот же IP-адрес, что и Wi-Fi, так что нормальный доступ inte rnet прерывается?

1 Ответ

1 голос
/ 06 мая 2020

Docker определяет собственную настройку сети. Вы можете увидеть некоторые подробности этого на Linux при запуске ifconfig и просмотре вывода iptables. Если вы вручную сконфигурируете сеть Docker так, чтобы она имела такой же блок CIDR, что и ваша внешняя сеть, вы можете закончить в последовательности, где:

  1. Я хочу позвонить по 8.8.8.8.
  2. Его нет ни в одной из моих локальных сетей, поэтому я перенаправлю на шлюз по умолчанию 192.168.178.1.
  3. Этот адрес находится в docker1 сети 192.168.178.0/24.

... и исходящие пакеты никогда не покидают ваш хост.

Вам почти никогда не потребуется вручную настраивать IP-адреса или сети в Docker. Он имеет собственную внутреннюю сетевую настройку и делает это за вас. В контексте Compose Compose также выполнит некоторые дополнительные настройки, которые вам обычно необходимы, например, создание сети default; Сеть в Compose содержит более подробную информацию.

Чтобы получить доступ к контейнеру извне Docker пространства, вам нужно опубликовать sh ports: из этого контейнера, а затем он будет доступен с IP-адреса вашего хоста на опубликованном порту.

services:
    mongo:
        ports: ['27017:27017']
        # no networks: or manual IP configuration; just use the `default` network
...