ubuntuusers.de

Docker Container über HTTPS nicht erreichbar

Status: Ungelöst | Ubuntu-Version: Ubuntu 18.04 (Bionic Beaver)
Antworten |

Roxas92

Anmeldungsdatum:
19. Oktober 2019

Beiträge: 2

Hallo zusammen,

ich habe mir gestern einen Ubuntu Server 18.04 auf gesetzt. Mit diesen will ich mir ein Privates Gogs Git betreiben. Das Setup läuft über Docker mit IPv6 und dynv6.com.

Ich habe soweit alles eingerichtet und die Portfreigaben auch. Wenn ich nun versuche die Gogs Startseite über einen Windows Rechner, im selben lokalen Netzwerk mit Domain Hosts-Eintrag auf die IP des Servers, anzusprechen bekomme ich diese auch aufgerufen. Versuche ich es aber über HTTPS funktioniert es nicht, ich bekomme auch keinen Accesslog-Eintrag, im Gegensatz zum Versuch über HTTP. Die SSL Zertifikate wurden über das "JrCs/docker-letsencrypt-nginx-proxy-companion"-Dockerimage erfolgreich erzeugt. Kann wer weiter Helfen und sagen wieso die Verbindung über HTTPS nicht funktioniert?

Vielen dank schon mal im voraus ☺

Hier noch meine Konfigs:

Connection Test vom Windows Rechner aus:

PS C:\Users\> Test-NetConnection -ComputerName ***.***.***.20 -Port 80
ComputerName     : ***.***.***.20
RemoteAddress    : ***.***.***.20
RemotePort       : 80
InterfaceAlias   : Ethernet 2
SourceAddress    : ***.***.***.24
TcpTestSucceeded : True

PS C:\Users\digim> Test-NetConnection -ComputerName ***.***.***.20 -Port 443
WARNUNG: TCP connect to (***.***.***.20 : 443) failed
ComputerName           : ***.***.***.20
RemoteAddress          : ***.***.***.20
RemotePort             : 443
InterfaceAlias         : Ethernet 2
SourceAddress          : ***.***.***.24
PingSucceeded          : True
PingReplyDetails (RTT) : 0 ms
TcpTestSucceeded       : False

PS C:\Users\> Test-NetConnection -ComputerName ***.***.***.20 -Port 443
WARNUNG: TCP connect to (***.***.***.20 : 443) failed
ComputerName           : ***.***.***.20
RemoteAddress          : ***.***.***.20
RemotePort             : 443
InterfaceAlias         : Ethernet 2
SourceAddress          : ***.***.***.24
PingSucceeded          : True
PingReplyDetails (RTT) : 1 ms
TcpTestSucceeded       : False

Router: Fritz!Box 6490 Cabel Freigaben:

Bezeichnung: HTTP-Server
Protokoll: TCP
IP-Adresse im Internet: ***.***.***.20
Port extern vergeben: 80

Bezeichnung: HTTPS-Server
Protokoll: TCP
IP-Adresse im Internet: ***.***.***.20
Port extern vergeben: 443

Bezeichnung: HTTP-Server
Protokoll: TCP
IP-Adresse im Internet: 2a02:***:***:***:***:***:**4:d098
Port extern vergeben: 80

Bezeichnung: HTTPS-Server
Protokoll: TCP
IP-Adresse im Internet: 2a02:***:***:***:***:***:**4:d098
Port extern vergeben: 443

UFW:

sudo ufw status
Status: Aktiv

Zu                         Aktion      Von
--                         ------      ---
443/tcp                    ALLOW       Anywhere
80/tcp                     ALLOW       Anywhere
22/tcp                     ALLOW       Anywhere
443/tcp (v6)               ALLOW       Anywhere (v6)
80/tcp (v6)                ALLOW       Anywhere (v6)
22/tcp (v6)                ALLOW       Anywhere (v6)

Docker-compose.yml:

version: "2"

services:
  nginx-proxy:
    container_name: nginx-proxy
    image: jwilder/nginx-proxy:latest
    restart: always
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - /mnt/storage/nginx-proxy/vhost:/etc/nginx/vhost.d
      - /mnt/storage/nginx-proxy/share/html:/usr/share/nginx/html
      - /mnt/storage/nginx-proxy/etc/ssl/certs/docker:/etc/nginx/certs
      - /mnt/storage/nginx-proxy/etc/letsencrypt:/etc/letsencrypt
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - /mnt/storage/nginx-proxy/additional.conf:/etc/nginx/conf.d/additional.conf:ro
  letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: nginx-proxy-le
    volumes_from:
      - nginx-proxy
    volumes:
      - /mnt/storage/nginx-proxy/etc/ssl/certs:/etc/nginx/certs:rw
      - /var/run/docker.sock:/var/run/docker.sock:ro
  git-gogs:
    container_name: git-gogs
    image: gogs/gogs:0.11.86
    restart: always
    depends_on:
      - db-mysql
      - nginx-proxy
    ports:
      - "58074:58074"
      - "83:3000"
    environment:
      - VIRTUAL_HOST=***.dynv6.net
      - VIRTUAL_PORT=3000
      - LETSENCRYPT_HOST=***.dynv6.net
      - LETSENCRYPT_EMAIL=***@gmail.com
    volumes:
      - /mnt/storage/git-gogs/data/:/data
    links:
      - db-mysql:mysql

Bearbeitet von Cranvil:

Vollständigen Inhalt im Codeblock Connection Test sichtbar gemacht.

Cranvil

Anmeldungsdatum:
9. März 2019

Beiträge: 990

Hallo Roxas92,

herzlich Willkommen im Forum! 😀

Für mich sieht es so aus, als hättest du mehrere getrennte Probleme:

  • Netzwerk- und Firewallkonfiguration in Host, Container und ggf. Netzwerk

  • Firewalls

  • Funktionsfähigkeit des nginx-Containers

  • Erreichbarkeit des gogs-Containers

  • Funktion des Reverse Proxy (nginx-Container > gogs-Container)

Wie du anhand dieser Aufzählung siehst, hast du noch etwas vor dir, fangen wir also sofort an. 😉

Du sprichst von IPv6, verwendest zum Testen im eigenen LAN aber IPv4. Du kannst gern beide Versionen fahren, allerdings kannst du den Zugriff über das eine Verfahren nicht mit dem anderen Verfahren testen. Sollte dein Problem hier liegen, sind auch unterschiedliche Lösungen notwendig. Während Docker IPv4-Container eher über NAT anbindet, wirst du bei IPv6-Containern eher mit Routing arbeiten müssen. Grundsätzlich haben beide Ansätze Vor- und Nachteile, allerdings in der Hauptsache unterschiedliche Dinge, die berücksichtigt werden wollen. Mach dir hier nochmal einen Kopf, ob das so alles klappt. Gern auch mit unserer Hilfe. ☺

Du hast eine Firewall angesprochen. Ich kenne mich mit Docker nicht gut genug aus, aber im extremsten Fall musst du vermutlich auf dem Docker-Host und den beiden Docker-Containern die Firewalls entsprechend einstellen - und ggf. auch in deiner FritzBox. Da sollten wir auch nochmal einen Blick drauf werfen. Was ich gerade nicht sagen kann: Wenn ein Docker-Container wie der nginx auf den anderen Docker-Container zugreifen will, wie müssen dann die Firewallregeln und Portmappings aussehen?

Du testest ja einen Host auf den Ports 80 und 443, davon Port 443 anscheinend nicht erfolgreich. Hast du die Tests auch im Webbrowser gemacht? Was kommen da jeweils für Meldungen? Ist die IP-Adresse überhaupt die des nginx-Containers oder die des gogs-Containers. Was passiert, wenn du den gogs-Container direkt von deinem Windows-Rechner aus zu erreichen versuchst? Immerhin hast du hier zwei Container, die beide erstmal ihr eigenes Süppchen kochen können.

Erst wenn du die einzelnen Komponenten gerade gezogen hast, kannst du dich damit beschäftigen, wie du den nginx so als Reverse Proxy eingerichtet bekommst, dass du Anfragen auch wirklich über diesen laufen lassen kannst. Und wenn wir das haben, können wir das ganze vielleicht noch ins Internet hieven. 😀

Also nochmal als Zusammenfassung: Bring dein Netzwerk in Ordnung bzw. lass uns wissen, was da nun Phase ist, damit wir dort unterstützen können. Dann sollten Firewalls und die einzelnen Container betrachtet werden und zuletzt die Integration.

Roxas92

(Themenstarter)

Anmeldungsdatum:
19. Oktober 2019

Beiträge: 2

Hallo Cranvil, danke für deine Antwort. ☺

Ich hatte das selbe Docker-Compose Setup auf einem älteren Server am laufen. Von daher bin ich mir sicher das Docker über die Einstellungen in der Compose die Entsprechenden Firewall Freischaltungen macht.

Da in den Docker Logs auch nur „richtige“-Log Meldungen, ohne Fehler, einlaufen und ich Gogs über HTTP erfolgreich aufrufen kann. Gehe ich stark davon aus dass die einzelnen Docker Container richtig eingestellt sind und funktionieren. 😉

Beim Reverse Proxy war es zumindest bei dem älteren Server so das über das Docker-Image „jrcs/letsencrypt-nginx-proxy-companion“ die entsprechenden Zertifikate erzeugt und die Einstellungen im Revers Proxy Container gesetzt wurden. 😮

Und mir ist bewusst das ich es über Lan dann mit IPv4 Teste und nicht über IPv6. Ich bekomme aber wenn ich über die bei dynv6.com gesetzte Domain gehe das selbe verhalten wie über IPv4. Der Server teilt dynv6.com immer nur die IPv6 mit, von daher sollte dann meine Anfrage über IPv6 laufen.

Antworten |