TL;DR
Beschreiben Sie Folgendes in docker-compose.override.yaml
yaml:docker-compose.override.yaml
version: "3.5" # docker-compose.Match mit Yaml-Version
services:
app: # host.docker.Dienstname, für den Sie intern verwenden möchten
extra_hosts:
- "host.docker.internal:172.101.0.1" #Entspricht der unten angegebenen Subnetzspezifikation
networks:
default:
driver: bridge
ipam:
config:
- subnet: 172.101.0.0/16 #Geben Sie an, dass keine Überlappung mit anderen Netzwerken erfolgen soll
Wenn die Firewall ausgeführt wird, müssen Sie möglicherweise den Zugriff über das oben genannte Subnetz zulassen. Hier ist ein Befehlsbeispiel für firewalld.
sudo firewall-cmd --permanent --zone=trusted --add-source=172.101.0.0/16
host.docker.internal
Eine spezielle Domäne für den Zugriff auf das Host-Netzwerk von einem Container aus, die von Docker für Mac und Docker für Windows unterstützt wird. Da Mac zum Mainstream der Entwickler geworden ist, ist es einfach in Projekten zu verwenden, und Linux-Benutzer haben jedes Mal Probleme.
Support host.docker.internal DNS name to host Support host.docker.internal in dockerd on Linux [RFD] add configuration option to add host.docker.internal by default
Mit diesen Problemen wird host.docker.internal
irgendwann unter Linux verfügbar sein, aber es wird einige Zeit dauern, bis es veröffentlicht wird, daher werde ich Workaround beschreiben.
Der Arbeitsinhalt ist eher wie oben beschrieben, daher werde ich einen Kommentar schreiben.
docker-compose.override.yaml
Diese Datei wird automatisch gelesen, wenn Sie den Befehl docker-compose ausführen. Dies ist daher hilfreich, wenn Sie eigene Einstellungen schreiben, die Sie nicht in das Repository aufnehmen möchten. Es wird jedoch nicht automatisch gelesen, wenn Sie die Option -f verwenden. Daher müssen Sie auch diese Datei angeben.
Fügen Sie den Inhalt zu / etc / hosts
des Containers hinzu.
networks
Alle Container gehören zum Netzwerk mit dem Namen default, sofern nicht anders angegeben. Wenn Sie also die Einstellungen hier schreiben, werden sie automatisch in allen Containern angezeigt. Hier wird das Standardnetzwerk-Subnetz festgelegt. Normalerweise wird das Netzwerksubnetz automatisch ausgewählt, damit es sich nicht mit dem vorhandenen Netzwerk überschneidet. Dieses Mal möchte ich es jedoch reparieren, sodass ich es manuell auswähle und einstelle. Der Host gehört zu allen Netzwerken und seine IP scheint "das niedrigste Bit der Subnetzmaske ist auf 1 gesetzt" zu sein. (Ich habe eine solche Aussage in der Dokumentation nicht gefunden, nur weil ich sie ausprobiert und gesagt habe, dass dies der Fall ist. Vielleicht gibt es Fälle, in denen dies nicht der Fall ist.) Wenn Sie diese IP in extra_hosts angeben, können Sie eine Domain zuweisen.
Recommended Posts