| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung |
| docker [2024-08-19 20:38:39] – [Installation] manfred | docker [2025-07-18 00:42:16] (aktuell) – [IPv6] david |
|---|
| > docker system prune -a -f | > docker system prune -a -f |
| > docker volume prune -f | > docker volume prune -f |
| | |
| | //für zukünftige Projekte __nur__ ''docker-ce'' aus [[https://docs.docker.com/engine/install/ubuntu/|Docker-Repo]] nutzen, __nicht__ ''docker.io'' aus dem Ubuntu-Repo nutzen// |
| |
| |
| ===== IPv6 ===== | ===== IPv6 ===== |
| |
| docker hat ja ein default bridge netzwerk, man kann mit diesen kommandos 2 neue bridges erstellen, die ipv6 können: | docker hat ein default bridge netzwerk welches sich zwecks abwärtskompatibilität anders verhält als selbst erstellte bridge netzwerke, daher ist es empfehlenswert eigene bridge netzwerke zu erstellen: |
| |
| > docker network create bridge6 --ipv6 -o com.docker.network.bridge.host_binding_ipv4="::" | |
| > docker network create bridge64 --ipv6 | > docker network create bridge64 --ipv6 |
| das 1. aktiviert ipv6 im container und macht, dass ports per default auf ipv6 gepublished werden, | > docker network create bridge6 --ipv6 --ipv4=false |
| also -p "8080:80" auf bridge6 verhält sich dann so wie -p "[::]:8080:80" sich auf der normalen bridge verhalten würde | > docker network create bridge4 |
| | |
| | man kann auch angeben auf welcher adresse ports standardmäßig exposed/published werden (nicht von dem "ipv4" im namen verwirren lassen, man kann sowohl ipv6 als auch ipv4 angeben): |
| | |
| | > docker network create bridge64 --ipv6 -o com.docker.network.bridge.host_binding_ipv4="::" |
| | > docker network create bridge64 --ipv6 -o com.docker.network.bridge.host_binding_ipv4="0.0.0.0" |
| | > docker network create bridge64 --ipv6 -o com.docker.network.bridge.host_binding_ipv4="::1" |
| | > docker network create bridge64 --ipv6 -o com.docker.network.bridge.host_binding_ipv4="127.0.0.1" |
| | |
| | dadurch verhält sich die minimale port notation (nur port ohne ip) so als ob man die jeweils konfigurierte ip mit angegeben hätte (die beiden letzteren sind äußerst praktisch, wenn die services nur auf localhost erreichbar sein sollen): |
| |
| das 2. aktiviert einfach nur ipv6 im container, d.h. -p "8080:80" auf bridge64 führt dazu, dass der service auf dem host unter [::]:8080 und 0.0.0.0:8080 erreichbar ist | * ''-p "8080:80"'' -> ''-p "[::]:8080:80"'' |
| | * ''-p "8080:80"'' -> ''-p "0.0.0.0:8080:80"'' |
| | * ''-p "8080:80"'' -> ''-p "[::1]:8080:80"'' |
| | * ''-p "8080:80"'' -> ''-p "127.0.0.1:8080:80"'' |
| |
| wichtig zu wissen, ipv6-only services im container sind nicht erreichbar, egal was man macht, denn docker macht auch in ipv6 aktivierten netzwerken immer ipv6->ipv4 und/oder ipv4->ipv4 (applikationen im container müssen also den socket auf dem sie listen wollen mit dem flag IPV6_V6ONLY gleich false oder 0 erstellen, in nginx geht das mit ipv6only=off) | wichtig zu wissen ist, dass ipv6-only services im container standardmäßig nicht erreichbar sind, egal welchen oben gezeigten weg man wählt, denn docker macht auch in ipv6 aktivierten netzwerken immer ipv6 -> ipv4 und/oder ipv4 -> ipv4 nat (applikationen im container müssen also den socket auf dem sie listen wollen mit dem flag IPV6_V6ONLY gleich false oder 0 erstellen, in nginx geht das bspw. mit ipv6only=off), alternativ kann man den docker-proxy umkonfigurieren oder deaktivieren und statt nat den routed mode nutzen, siehe dazu die offiziellen docker docs |
| |
| |