Docker inspect содержит старые IP-адреса после изменения IP-адреса - PullRequest
0 голосов
/ 06 августа 2020

Я создаю docker контейнеров с приложением node.js (зависит от dockerode API от apocas) с несколькими docker сетями, подключенными к каждому контейнеру. По умолчанию каждый контейнер получает случайный IP-адрес для каждого сетевого интерфейса.

Пример: dev-контейнер с IP: 172.18.0.2 и подключен к сети demo- net на интерфейсе eth4

Когда я делаю docker inspect dev-container, я вижу эту сеть demo- net подключен к контейнеру dev-container с ip-адресом 172.18.0.2 (как и ожидалось).

Теперь я выполняю dev-container с помощью docker exec -it dev-container /bin/bash и настройте IP-адрес с помощью ifconfig eth4 192.168.99.169 netmask 255.255.240.0.

Результат: ifconfig показывает, что новый адрес 192.168.99.169 подключен к интерфейсу eth4. Но когда я снова делаю docker inspect dev-container, все еще остается старый адрес 172.18.0.2 , подключенный к сети demo- net (не ожидается).

Есть ли способ, которым docker может обновить настройки внутренней сети, чтобы docker inspect отображал обновленные настройки IP, или есть лучший способ изменить IP-адрес контейнера?

(Docker версия это 19.03.12)

1 Ответ

1 голос
/ 06 августа 2020

Docker не заметит, если вы попытаетесь вручную изменить конфигурацию сети вашего контейнера. Вы можете docker rm ваш контейнер и docker run его снова, чтобы вернуть вещи в согласованное состояние.

По аналогии вы можете попробовать войти в свой домашний WiFi-роутер. Он может сказать, что ваш ноутбук - 192.168.1.2, а ваш принтер - 192.168.1.3. Вы, конечно, можете запустить ifconfig, чтобы изменить IP-адрес вашего ноутбука на 192.168.1.3/24 или на 10.20.30.40/16; но если вы сделаете это, ваш маршрутизатор не будет знать, что это происходит, IP-маршрутизация не будет работать правильно, если вы попытаетесь выполнить вызов (или если вы настроили правило обратного NAT, чтобы разрешить входящие вызовы обратно), и вы можете получить странные сетевые конфликты при попытке печати. ​​

Docker полностью управляет сетевыми интерфейсами контейнеров. Нет причин запускать ifconfig или ip в контейнере. Частный IP-адрес контейнера на самом деле является деталью реализации, и его нельзя использовать во многих обычных обстоятельствах; Я бы тоже не стал это искать. Точно так же вам не нужно устанавливать его вручную, но если вы это сделаете, «создать контейнер» Docker API (в основном напрямую предоставляется dockerode) позволяет вам указать NetworkingConfig.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...