eth0 IP в диапазоне IP-адресов докеров - PullRequest
0 голосов
/ 20 февраля 2019

На одной из машин, на которой нам нужно развернуть докер-контейнеры, задан IP-адрес eth0 в пределах диапазона IP-адресов док-станции (172.17.0.1/16).

Проблема заключается в том, что при попытке доступа к этому серверучерез NAT извне (SSH и т. д.), тогда все "зависает".Я предполагаю, что пакеты неправильно перенаправляются по правилам iptables докера.

Какая рекомендация в этом случае, если мы не можем изменить IP eth0?

1 Ответ

0 голосов
/ 20 февраля 2019

Docker должен избегать коллизий подсетей, если он видит все используемые подсети при создании своих сетей.Однако если вы меняете сети (например, ноутбук), то вы хотите настроить пулы адресов для использования докером.Шаги для этого в моих слайдах здесь: https://sudo -bmitch.github.io / Presentations / dc2018eu / tips-and-tricks-of-the-captains.html # 19

Важными деталями являются настройка файла /etc/docker/daemon.json, содержащего:

{
  "bip": "10.15.0.0/24",
  "default-address-pools": [
    {"base": "10.20.0.0/16", "size": 24},
    {"base": "10.40.0.0/16", "size": 24}
  ]
}

При необходимости настройте диапазоны ip.Остановите все контейнеры в поврежденных сетях, удалите контейнеры, удалите любые созданные пользователем сети, перезапустите механизм докера, а затем заново создайте любые созданные пользователем сети и контейнеры (часто последние два шага просто включают удаление и повторное развертывание составного проекта или стека роя).


Обратите внимание, неясно, пытались ли вы подключиться к вашему хосту или контейнеру.Вы не должны подключаться напрямую к IP-адресу контейнера (за очень немногими исключениями).Вместо этого вы публикуете нужные порты, к которым вам нужен внешний доступ, и вы подключаетесь к IP-адресу хоста на этом опубликованном порте, чтобы достичь контейнера.Например,

docker run -d -p 8080:80 nginx

Запустит nginx с обычным портом 80 внутри контейнера, к которому вы обычно не можете добраться извне.Публикация хост-порта 8080 (также может быть и 80, чтобы соответствовать порту контейнера) сопоставляет соединения с портом контейнера 80.

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

...