Почему docker-compose запускает новый IP-адрес? - PullRequest
0 голосов
/ 18 марта 2019

Каждый раз, когда я запускаю машину для создания докеров, она запускается с новым IP-адресом, и я задаюсь вопросом:

  • Почему?
  • Как он узнает, что у него естьуже использовал Ip .0 и перепрыгивает на .1, а затем на .2 и т. д.?
  • Есть ли способ сказать: эй, не переходите с IP x?

Спасибо

Я надеюсь, что вы можете ответить на вопрос, почему, это может объяснить другим.Пожалуйста, обратитесь к документации об этом.Спасибо

Ответы [ 2 ]

1 голос
/ 18 марта 2019

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

version: '2'

services:
  consul:
    container_name: consul
    image: consul:1.4.2
    networks:
      consul-dns:
        ipv4_address: 172.31.255.10
    environment:
      CONSUL_ALLOW_PRIVILEGED_PORTS: 1
    volumes:
      - ./config:/consul/config
      - ./data:/consul/data
    restart: on-failure
    command: "agent -data-dir=/consul/data -config-dir=/consul/config -dev -client 0.0.0.0"

networks:
  consul-dns:
    driver: bridge
    ipam:
      config:
        - subnet: 172.31.255.0/24
          gateway: 172.31.255.1
1 голос
/ 18 марта 2019

Лучшая документация по этому вопросу попадает в технические детали.Работа в сети в Docker реализована с помощью libnetwork, а распределение IP-адресов выполняется IPAM.Это задокументировано по адресу: https://github.com/docker/libnetwork/blob/master/docs/ipam.md

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

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

Самое главное, ни одно из этого не должно иметь значениясовсем.Если вы используете IP-адреса для связи между вашими приложениями, ваше приложение, вероятно, не готово к использованию контейнеров.Между контейнерами вы должны использовать, по крайней мере, DNS, и желательно что-то вроде VIP-режима swarm или сервис kubernetes, который лучше обрабатывает недолговечные контейнеры и обновляемые обновления.Результаты DNS могут легко устареть с их свойством кэширования, указывая на контейнеры, которые больше не работают.Независимо от того, используете ли вы DNS или VIP / Service, оставьте это на усмотрение инструмента выполнения / оркестровки контейнера, и просто попросите ваше приложение разрешить имя службы, а не полагаться на IP-адрес напрямую.

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