Docker-Knoten mit mehreren IP-Adressen - Zwischen ihnen wechseln

Docker-Knoten mit mehreren IP-Adressen - Zwischen ihnen wechseln

Meine Netzwerkkonfiguration sieht auf einem Docker-Host ungefähr so ​​aus:

➜  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

Derzeit laufen auf dem Port 443der .18IP-Adresse bereits vorhandene Nicht-Docker-Dienste, und das soll auch so bleiben. Wenn ich jedoch einen Port mit einem öffne Dockerfile, schlägt der Start fehl, da der Port 443bereits vom Host verwendet wird.

Gibt es eine Möglichkeit, die IP-Adresse, die Docker beim Öffnen eines Ports verwendet, global umzuschalten? Ich möchte dies nicht manuell in der Konfigurationsdatei jedes Containers festlegen müssen, was natürlich bereits funktioniert.

Antwort1

Sie müssen keine Ports freigeben, um auf bestimmte Container in der Servicedeklaration zuzugreifen. Tatsächlich können Sie ein Netzwerk innerhalb einer einzelnen docker-compose.yml mit einem anderen Subnetz wie folgt deklarieren:

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

Und greifen Sie mit der statischen IP 73.0.0.10für das benutzerdefinierte Netzwerk auf den Nginx-Dienst zu.

Weitere Informationen finden Sie jederzeit in den Netzwerkdokumenten für Docker-Compose: https://docs.docker.com/compose/networking/

Oder direkt die Docker-Dokumente: https://docs.docker.com/engine/userguide/networking/

verwandte Informationen