
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 443
der .18
IP-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 443
bereits 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.10
fü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/