Hintergrund Es gibt einen Tencent Linux Cloud-Host, auf dem ein Docker (ServiceDocker genannt, Name, siehe unten) bereitgestellt wird. ServiceDocker verwendet intern die Ports 80, 443 und 3306, die jeweils den gleichen Ports des Hosts (Cloud-Hosts) zugeordnet sind (also 80, 443 und 3306). XAMPP wird im ServiceDocker installiert und auf dieser Basis auch der Server des QR-Code-Scan-Anmelde-Applets deployt. Die Ports 80 und 443 von ServiceDocker bieten jeweils http- und https-Dienste und Port 3306 ist der Port der MySQL-Datenbank. ServiceDocker ist an den Domänennamen sign.famend.cn gebunden. Ziel Ein ServiceDocker im Cloud-Host belegt die Ports 80 und 443. Wenn Sie einen anderen Server im Host einsetzen möchten, um externe Dienste bereitzustellen, können Sie die Ports 80 und 443 nicht verwenden. Unser Ziel ist es, mehrere ServiceDocker im Host bereitzustellen. Jeder ServiceDocker ist an seinen eigenen Domänennamen gebunden, stellt Dienste für die Außenwelt bereit und stellt sicher, dass die Ports 80 und 443 verfügbar sind. Ideen Ändern Sie die Portzuordnung von ServiceDocker und ordnen Sie die ServiceDocker-Ports 80 und 443 den Ports 89 und 449 des Hosts zu. Dadurch werden die Ports 80 und 443 des Hosts freigegeben. Die freigegebenen Ports 80 und 443 werden von Nginx verwendet. Installieren Sie Docker mit Nginx (genannt NginxDocker, genannt mynginx, das Gleiche unten). NginxDocker verwendet intern die Ports 80 und 443, die jeweils den Ports 80 und 443 des Hosts zugeordnet sind. Als Reverse-Proxy wird NginxDocker verwendet. Wenn eine Zugriffsanforderung vorliegt, werden nach dem Lesen der Nginx-Konfiguration verschiedene URLs an die entsprechenden Docker weitergeleitet. Wenn Sie beispielsweise http://sign.famend.cn:80 besuchen, wird die Seite automatisch http://sign.famend.cn:89 zugeordnet. Implementierungsschritte 1. Ändern Sie die Portzuordnung von ServiceDocker und geben Sie die Ports 80 und 443 frei. Docker bietet keinen Befehl zum Ändern des Ports. Ich habe im Internet zwei Methoden gefunden. Methode 1: Stoppen Sie zuerst den Container, packen Sie den Container in ein Image und führen Sie dann das neue Image aus. Geben Sie den neuen Port an, wenn Sie das neue Image ausführen. Die verwendeten Befehle sind wie folgt: #Stoppen Sie zuerst den Container. Docker stoppt ContainerA #Commit des Containers in einen Spiegel Docker Commit ContainerA newImageB #Führen Sie den Container aus docker run -p 8080:8080 -p 8081:8081 -v /home/data/:/home/data/ -dt newImageB Methode 2: Stoppen Sie zuerst den Container, dann den Containerdienst, ändern Sie dann die Containerkonfigurationsdatei und starten Sie schließlich den Containerdienst und starten Sie den Container. Hier sind die Schritte: ①Stoppen Sie ServiceDocker (der Name von ServiceDocker ist signiert) und stoppen Sie den Docker-Dienst. Sudo Docker Stoppschild sudo service docker stop ②Verwenden Sie den Befehl docker ps -a, um die CONTAINER-ID des zu ändernden Containers zu finden. ③Führen Sie den Befehl docker inspect [CONTAINER ID] | grep Id aus. ④Führen Sie den Befehl cd /var/lib/docker/containers aus, um das Verzeichnis mit derselben ID aufzurufen und zu finden. Wenn beim Ausführen des CD-Befehls „Berechtigung verweigert“ angezeigt wird, führen Sie zuerst „sudo -s“ aus. Nachdem Sie das der ID entsprechende Verzeichnis aufgerufen haben, öffnen Sie die Datei hostconfig.json. Die Zuordnung von Port 80 finden Sie wie folgt: "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "80" }] Ändern Sie "HostPort": "80" in "HostPort": "89" wie folgt: "80/tcp": [ { "HostIp": "0.0.0.0", "HostPort": "89" }] Vor der Änderung wird Port 80 innerhalb von ServiceDocker Port 80 auf dem Host zugeordnet. Nach der Änderung wird Port 80 innerhalb von ServiceDocker Port 89 auf dem Host zugeordnet. Eine kurze Erklärung: In einigen Artikeln (2 und 3 in den Referenzen) wird erwähnt, dass config.v2.json geändert werden muss, aber ich habe persönlich getestet, dass dies nicht notwendig ist. Diese Datei wird automatisch geändert, wenn Sie ServiceDocker starten. ⑤Starten Sie den Docker-Dienst und starten Sie dann ServiceDocker (benanntes Zeichen). sudo service docker start sudo Docker Startzeichen Sowohl Methode (1) als auch Methode (2) sind akzeptabel. Ich habe Methode (2) gewählt. Öffnen Sie nach der Ausführung von Methode (2) zur Überprüfung den Browser und es wird die Meldung „Auf die Website kann nicht zugegriffen werden“ angezeigt. Es wird vorläufig davon ausgegangen, dass der Server im Docker nicht gestartet ist. Führen Sie den folgenden Befehl aus: sudo /opt/lampp/lampp stopp sudo /opt/lampp/lampp starten Beim Ausführen von „Stop“ stellte ich fest, dass Apache nicht gestartet wurde. Dies kann daran liegen, dass Port 80 geändert wurde. Öffnen Sie nach der Ausführung von „Start“ den Browser, um http://sign.famend.cn:89 und https://sign.famend.cn:449 zu überprüfen. Der Zugriff ist erfolgreich. Die Methode zum Ändern des Docker-Ports ist nicht kompliziert. Wenn zukünftige Versionen von Docker entsprechende Befehle bereitstellen können, wird es meiner Meinung nach viel bequemer sein. Führen Sie übrigens crontab -l aus, um zu prüfen, ob die geplante Aufgabe in ServiceDocker gestartet wurde. Wenn nicht, führen Sie service cron start aus, um die geplante Aufgabe zu starten. Konfigurieren Sie als Nächstes den NginxDocker-Reverse-Proxy, sodass auch auf http://sign.famend.cn:80 und https://sign.famend.cn:443 erfolgreich zugegriffen werden kann. 2. Konfigurieren Sie den NginxDocker-Reverseproxy. ①Laden Sie nginx herunter und führen Sie es aus. Docker-Container ausführen \ -D \ -p 80:80 \ -p 443:443 \ --rm \ --name mynginx \ nginx ②Konfigurieren Sie die Nginx-Konfigurationsdatei. mkdir nginx-Dateien Docker-Container cp mynginx:/etc/nginx. mv nginx conf vi conf/nginx.conf Fügen Sie in nginx.conf die folgenden Reverse-Proxy-Informationen hinzu. Server{ hören Sie 443 SSL; Servername sign.famend.cn; SSL-Zertifikat /etc/nginx/ssl/sign.famend.cn/1_sign.famend.cn_bundle.crt; SSL-Zertifikatsschlüssel /etc/nginx/ssl/sign.famend.cn/2_sign.famend.cn.key; Standort / { Proxy_Set_Header HOST $Host; Proxy_Set_Header X-Real-IP $Remote_Addr; proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for; Proxy_set_header X-Weitergeleitet-Proto $scheme; Proxy-Passwort http://sign.famend.cn:89/; } } Server{ hören Sie 80; Servername famend.cn sign.famend.cn; Standort / { Proxy_Set_Header HOST $Host; Proxy_set_header X-Real-IP $remote_addr:89; proxy_set_header X-Weitergeleitet-Für $proxy_add_x_forwarded_for; Proxy_set_header X-Weitergeleitet-Proto $scheme; Proxy-Passwort http://sign.famend.cn:89/; } } Für Port 443 müssen Sie ssl_certificate und ssl_certificate_key verwenden. Das in ServiceDocker verwendete LetsEncrypt SSL-Zertifikat wird alle 90 Tage erneuert. Quelle der SSL-Zertifikate: Eine Möglichkeit für sie, SSL-Zertifikate von LetsEncrypt zu teilen. Darüber hinaus stellt Tencent für bei ihm registrierte Domänennamen kostenlose SSL-Zertifikate mit einer Gültigkeit von 1 Jahr zur Verfügung. Der Einfachheit halber habe ich direkt das SSL-Zertifikat von Tencent verwendet. Natürlich muss das Zertifikat vor Ablauf innerhalb eines Jahres erneuert werden. ③Stoppen Sie mynginx und starten Sie es dann neu. Docker-Container ausführen \ --name mynginx \ --volume "$PWD/conf":/etc/nginx \ -p 80:80 \ -p 443:443 \ -D \ nginx Lassen Sie dieses Mal die Option --rm weg, damit der Container beim Stoppen erhalten bleibt. Nun ist die Konfiguration abgeschlossen. verifizieren Im Browser öffnen sign.famend.cn:80 sign.famend.cn:89 sign.famend.cn:449 sign.famend.cn:443 Kann normal zugreifen. Beim Öffnen von 449 und 443 können Sie natürlich feststellen, dass die von den beiden URLs verwendeten Zertifikate unterschiedlich sind. 449 wird von LetsEncrypt bereitgestellt und ist 90 Tage gültig; 443 kommt von Tencent (herausgegeben von TrustAsia) und ist 1 Jahr gültig. Natürlich kann auch eine andere Website in ServiceDocker, famend.cn, besucht werden:
Zusammenfassen Das Obige ist die vom Herausgeber eingeführte Methode, um mit Nginx die Koexistenz mehrerer Container auf dem Server zu erreichen. Ich hoffe, es wird allen helfen. Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und der Herausgeber wird Ihnen rechtzeitig antworten. Ich möchte auch allen für ihre Unterstützung der Website 123WORDPRESS.COM danken! Das könnte Sie auch interessieren:
|
<<: So verwenden Sie video.js in Vue zum Abspielen von Videos im M3U8-Format
>>: MySQL-Löschfunktion für Mehrfachtabellenverbindungen
Einführung Wenn ich zurückblicke, sagte der Lehre...
Inhaltsverzeichnis Problembeschreibung Historisch...
Siehe das offizielle Dokument http://dev.mysql.co...
Inhaltsverzeichnis 01 Szenarioanalyse 02 Funktion...
Inhaltsverzeichnis Über Kubernetes Grundlegende U...
Inhaltsverzeichnis 1. Was ist ein Hook? 2. Warum ...
Lesetipp: MySQL 8.0.19 unterstützt Kontosperrfunk...
In diesem Artikelbeispiel wird der spezifische Co...
Letztes Wochenende bereitete sich ein Bruderproje...
Der vorherige Artikel war eine einfache Überprüfu...
In diesem Artikelbeispiel wird der spezifische Co...
Nginx-Installation Stellen Sie sicher, dass die v...
1. Umweltvorbereitung Tencent Cloud Server CENTOS...
Die PC-Version von React wurde für die Verwendung...
* Adresse - Adresse * Blockzitat - Blockzitat * Mi...