Ich habe einige Dienste in Docker auf einem Raspberry Pi eingerichtet. Dazu einen Dyndns-Account bei IPV64.de. Mit einem Nginx-Container kann ich nun von aussen auf einen Container zugreifen. Funktioniert über http tadellos. Sobald ich aber in Nginx ein Letsencrypt-Zertifikat erstellen möchte, erhalte ich einen Fehler und im Log vom Nginx steht dazu folgendes:
An unexpected error occurred: requests.exceptions.ConnectionError: HTTPSConnectionPool(host='acme-v02.api.letsencrypt.org', port=443): Max retries exceeded with url: /directory (Caused by NameResolutionError("<urllib3.connection.HTTPSConnection object at 0x7fada425d0>: Failed to resolve 'acme-v02.api.letsencrypt.org' ([Errno -3] Temporary failure in name resolution)")) Ask for help or search for solutions at https://community.letsencrypt.org. See the logfile /tmp/letsencrypt-log/letsencrypt.log or re-run Certbot with -v for more details.
Hat da jemand einen guten Tipp? Oder welche zusätzlichen Infos soll ich liefern? Ich bedanke mich schon mal!
Die Fehlermeldung lässt darauf schließen, dass der Nginx Container kein Zugriff ins Internet hat. Weil ansonsten könnte certbot den FQDN acme-v02.api.letsencrypt.org auflösen.
Dabei meine ich, alles gemäss den Videos von Dennis (die ich übrigens alle mega gut finde!) gemacht. Habe keine Ahnung, was da bei mir falsch sein könnte, dass der nginx nicht ins Internet kommt…
Ja, es läuft ein Pihole, ebenfalls unter Docker. Habe es mal für 5 Minuten disabled. Trotzdem leider der gleiche Fehler. Der Nginx hat keine Internetverbindung. Was kann ich noch unternehmen?
Aktuell wird aber auf der Homepage des npm ein docker compose file angeboten, in dem statt der MariaDB mit SQLite gearbeitet wird. Habe diese aktuellen Einstellungen genommen: npm - quick setup
Setze mal bitte deinen DNS Server des Hostsystem (RPI) auf einen öffentlichen DNS Server. Hatte nämlich das gleiche Problem, wenn der Pi sich selbst als DNS drin stehen hatte, was dann entsprechend an die Docker Container weitergegeben wird, hat das ganze ebenfalls nicht funktioniert. Es ist vielleicht nicht die Best Practice Lösung, aber hat bei mir funktioniert gehabt.
Zuvor muss du auf deinem RaspberryPi die NetworkManager.conf anpassen, da bei einem Neustart die resolv.conf überschrieben wird.
Diese liegt unter /etc/NetworkManager/NetworkManager.conf
Dort muss der Punkt dns=none hinzugefügt werden.
Anschließend kannst du in der resolv.conf die öffentlichen Nameserver setzen.
z.B:
Danach den Pi neu starten und erneut auf dem NPM Container den Curl Befehl ausführen.
curl -I https://acme-v02.api.letsencrypt.org/
Um das ganze wieder rückgängig zu machen, einfach in der NetworkManager.conf den Eintrag: dns=none raus nehmen und den Pi neu starten. Dann zieht der Pi sich die DNS Config wieder von deinem Router.
da ich vor demselben Problem stehe wie @hase24 bin ich über Google auf dieses Forum gestoßen. PiHole sowie NPM laufen auf dem gleichen Host (Debian Server 12) und der NPM kann sich keine Zertifikate holen. Jetzt wollte ich deine beschriebene Lösung testen, kann aber die NetworkManager.conf bei mir nicht finden, die Datei ist nicht vorhanden.
In der resolv.conf vom Debian (Host) steht folgendes:
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.
nameserver 127.0.0.11
search fritz.box
options ndots:0
# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [192.168.178.1]
# Overrides: []
# Option ndots from: internal
NPM: resolv.conf
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.
nameserver 127.0.0.11
search fritz.box
options ndots:0
# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [192.168.178.152]
# Overrides: []
# Option ndots from: internal
@Neo3477 - Wenn deine resolv.conf des Hosts nicht vom NetworkManager verwaltet wird, dann kannst du dort eigentlich direkt die neuen Nameserver eintragen. Dann reboot und erneut testen.
Nach einem Neustart stand wieder der alte nameserver drinnen , also die 192.168.178.152.
Was, wenn ich das richtig verstehe, auch so sein sollte da ja der PiHole den DNS machen soll und der so an der Fritzbox eingetragen ist.
@Neo3477 - Ok, der DNS Server wird über die FRITZ!Box an deine Clients verteilt…Beim Pi mit Docker usw. hab ich schlechte Erfahrungen damit gemacht, wenn dort kein öffentlicher DNS Server drin steht. (Wie hier bereits beschrieben)
Würde bei dir der NetworkManager laufen, wäre der Weg hier bereits beschrieben. Du musst den PI dazu bringen, sich die DNS Settings nicht von der FRITZ!Box überschreiben zu lassen. Dann kannst du die resolv.conf nach deinen Vorlieben anpassen. Ohne NetworkManager müsste ich dies selbst erstmal recherchieren.
Was wäre den Best Practice um beides (PiHole und NPM) zusammen vernünftig zum laufen zu bekommen? Da auf dem Server aktuell sonst nichts weiter läuft, außer noch Portainer, ist das ganze ja schnell aufgesetzt. Aktuell, wie gesagt, alles auf einem Debian Server der auf einem NUC läuft. Ich hätte aber auch noch eine Synology wo ich wenn nötig einen der Container auslagern könnte, wenn das besser ist. Oder den NetworkManager nachträglich installieren…?