Рейтинг:0

Как правильно настроить хост с двумя сетевыми интерфейсами, чтобы докер-контейнер мог нормально предоставлять услуги?

флаг us

Мой сервер имеет два сетевых интерфейса, поэтому два IP-адреса, один IP-адрес в Интернете и один частный адрес.

Я добавил следующий скрипт в /etc/iproute2/rt_tables:

252 enp0s3
251 enp0s8

И добавил следующий скрипт в /etc/rc.local:

ip route добавить по умолчанию через 172.17.171.151 dev enp0s3 таблица enp0s3
IP-правило добавить из таблицы 172.17.171.151 enp0s3

ip route добавить по умолчанию через 172.17.168.121 dev enp0s8 таблица enp0s8
ip правило добавить из таблицы 172.17.168.121 enp0s8

Теперь все работало нормально.

Я могу пропинговать эти два ips, так что icmp работает нормально. Я также могу подключиться к серверу по SSH через любой IP, поэтому порт 22 также работает хорошо.

Однако, когда я использую следующую команду docker-compose для запуска nginx, я обнаружил, что браузер клиента может получить доступ только к порту 80 любого из двух IP-адресов, а порт 80 другого IP-адреса не отвечает.

версия: "3"
Сервисы:
  нгинкс:
    перезапуск: всегда
    имя_контейнера: nginx
    изображение: nginx
    порты:
     - 0.0.0.0:80:80
    тома:
     - ./журнал:/вар/лог/nginx

Что вызвало это? Как я могу выйти из этой ситуации?

Примечание: Приведенный выше файл конфигурации представляет собой тестовую среду, которую я создал с помощью виртуальной машины, поэтому все IP-адреса являются частными.

Действия по воспроизведению:

  1. Использовать Виртуальная коробка Oracle VM для запуска ubuntu 16.04 с двумя сетевыми интерфейсами моста.
  2. Войдите в виртуальную машину.
  3. Обратитесь к приведенному выше сценарию, чтобы изменить /etc/iproute2/rt_tables и /etc/rc.local.
  4. Установите докер и docker-compose.
  5. Используйте docker-compose выше, чтобы запустить Nginx.
  6. Независимо от того, какой сетевой интерфейс открыт, хост может получить доступ к порту 80 соответствующего IP-адреса виртуальной машины.
  7. Если два сетевых интерфейса открыты одновременно, то может быть открыт только порт 80 одного из сетевых интерфейсов, а другой не отвечает.

Дополнительная информация: Если я запускаю Nginx непосредственно на виртуальной машине, хост-компьютер может получить доступ к порту 80 из двух IP-адресов.

Ответить или комментировать

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