Узел Docker с несколькими IP-адресами — переключение между ними

Узел Docker с несколькими IP-адресами — переключение между ними

Моя сетевая конфигурация на хосте Docker выглядит примерно так:

➜  server git:(master) ✗ ip addr
3: ens9: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 00:02:c9:bb:3b:f4 brd ff:ff:ff:ff:ff:ff
    inet <IP Address>.18/29 brd <Default Gateway>.23 scope global ens9
       valid_lft forever preferred_lft forever
    inet <IP Address>.19/29 brd <Default Gateway>.23 scope global secondary ens9:0
       valid_lft forever preferred_lft forever

В настоящее время у меня есть существующие не-Docker-сервисы, работающие на порту 443по .18IP-адресу, и мне нужно сохранить это. Однако, когда я открываю порт с помощью Dockerfile, он не запускается, потому что порт 443уже используется хостом.

Есть ли способ глобально переключить IP-адрес, который Docker использует при открытии порта? Я не хочу устанавливать это вручную в файле конфигурации каждого контейнера, который, конечно, и так работает.

решение1

Вам не нужно выставлять порты для доступа к определенным контейнерам в объявлении сервиса. Фактически, вы можете объявить сеть внутри одного docker-compose.yml с другой подсетью, например так:

version: '2'

networks:
  custom-network:
    ipam:
      driver: default
      config:
        - subnet: 73.0.0.0/16
          ip_range: 73.0.0.0/24
          gateway: 73.0.0.254

services:
  simple-nginx:
    image: nginx
    networks:
      custom-network:
        ipv4_address: 73.0.0.10

И получите доступ к службе nginx, используя статический IP-адрес 73.0.0.10для пользовательской сети.

Для получения дополнительной информации вы всегда можете ознакомиться с сетевой документацией по docker-compose: https://docs.docker.com/compose/networking/

Или непосредственно в документации Docker: https://docs.docker.com/engine/userguide/networking/

Связанный контент