Verwendung von Umgebungsvariablen in Docker und Lösungen für häufige Probleme

Verwendung von Umgebungsvariablen in Docker und Lösungen für häufige Probleme

Vorwort

Docker kann Umgebungsvariablen für Container konfigurieren. Es gibt zwei Möglichkeiten zur Konfiguration:

  • Fügen Sie beim Erstellen eines Images mit dem Befehl ENV Umgebungsvariablen zum Image hinzu. Verwenden Sie diese Umgebungsvariable beim Starten des Containers.
  • Beim Starten des Containers werden die Umgebungsvariablen über Parameter konfiguriert. Wenn das Image doppelte Umgebungsvariablen enthält, werden die Umgebungsvariablen des Images überschrieben.

Verwenden Sie docker exec {containerID} env um die im Container wirksamen Umgebungsvariablen anzuzeigen.

[root@localhost ~]# docker exec 984 umgebung
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/default/bin
TERM=xterm
AUTHORIZED_KEYS=**Keine**
JAVA_HOME=/usr/java/default
HOME=/Wurzel
...

Im vom Container gestarteten Prozess, also in ENTRYPOINT+CMD, können die Umgebungsvariablen des Containers über die entsprechende Systembibliothek abgerufen werden.

Rufen Sie den Container auf und zeigen Sie die Umgebungsvariablen des Prozesses an. Sie können sie unter /proc anzeigen.

Katze /proc/{pid}/Umgebung

Daher können die Umgebungsvariablen im Container auch durch Anzeigen der Umgebungsvariablen von Prozess Nr. 1 im Container abgerufen werden. Sie können es anzeigen, indem Sie den Befehl cat /proc/1/environ |tr '\0' '\n' ausführen.

[root@localhost ~]# docker exec -it 984 cat /proc/1/environ |tr '\0' '\n'
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/java/default/bin
TERM=xterm
AUTHORIZED_KEYS=**Keine**
JAVA_HOME=/usr/java/default
HOME=/Wurzel
...

Im Allgemeinen erben aus einem übergeordneten Prozess generierte untergeordnete Prozesse standardmäßig die Umgebungsvariablen des übergeordneten Prozesses. Daher sollten die Umgebungsvariablen jedes Prozesses im Container ungefähr gleich sein. Natürlich werden in einigen Sonderfällen auch Umgebungsvariablen zurückgesetzt, was zu Missverständnissen und Problemen führt. Nachfolgend werden einige häufige Situationen in Containern erläutert.

Häufige Probleme und Lösungen

Umgebungsvariablen verschwinden nach dem Wechsel zu anderen Benutzern

Wechseln Sie im Container nach dem Start zu verschiedenen Benutzern. Wenn Sie beispielsweise mit su - admin zum Administratorbenutzer wechseln, stellen Sie möglicherweise fest, dass die konfigurierten Containerumgebungsvariablen verloren gehen.

Dies liegt daran, dass beim Wechseln der Benutzer die Umgebungsvariablen zurückgesetzt werden. Daher müssen Sie die Methode su -p admin verwenden, um die vorherigen Umgebungsvariablen zu erben.

Wir können die Hilfe verwenden, um die Beschreibung der relevanten Parameter von su anzuzeigen.

[root@adworderp-03a38d62-4103555841-m81qk /]# su --help
Verwendung: su [OPTION]… [-] [USER [ARG]…]
Ändern Sie die effektive Benutzer-ID und Gruppen-ID in die von USER.

...
 -m, --preserve-environment setzt HOME, SHELL, USER, LOGNAME nicht zurück
    Umgebungsvariablen
 -p dasselbe wie -m
...

Verstümmelte Zeichen in Containern

Einige Unternehmen berichten bei der Migration auf Container häufig von verstümmelten Protokollen. Der allgemeine Grund liegt darin, dass das Gebietsschema nicht richtig konfiguriert ist.

Sie können das Gebietsschema des aktuellen Containers über das Gebietsschema anzeigen. Wenn nicht festgelegt, ist es normalerweise POSIX. Mit „locale -a“ können wir die vom aktuellen Container unterstützte Sprachumgebung anzeigen und sie dann nach Bedarf einstellen.

Wenn Sie das Problem ein für alle Mal lösen möchten, fügen Sie beim Starten des Containers oder des Images am besten LANG={xxx} zu den Umgebungsvariablen hinzu und wählen Sie die entsprechende Sprache aus, um das dadurch verursachte Problem des verstümmelten Codes zu vermeiden.

Problem mit der SSH-Umgebungsvariable

Das Aktivieren von SSHD im Container kann die Verbindung und Fehlerbehebung sowie einige tägliche Betriebs- und Wartungsvorgänge erleichtern.

Viele Benutzer, die den Container aufrufen, stellen jedoch fest, dass die beim Start von Docker konfigurierten Umgebungsvariablen nicht normal über den Befehl env angezeigt werden können.

Der Hauptgrund hierfür ist, dass die Umgebungsvariablen zurückgesetzt werden, wenn SSH eine Verbindung für den Benutzer herstellt.

Das größte dadurch verursachte Problem besteht darin, dass der über SSH gestartete Containerprozess die beim Start des Containers konfigurierten Umgebungsvariablen nicht abrufen kann.

Nachdem Sie das Prinzip verstanden haben, gibt es eine einfache Möglichkeit, dieses Problem zu lösen. Das heißt, Sie können die Umgebungsvariablen des Containers nach der SSH-Verbindung auf die Sitzung zurücksetzen.
Die spezifische Implementierungsmethode besteht darin, dass nach der SSH-Verbindung die Quelle /etc/profile automatisch ausgeführt wird.

Dann müssen wir nur noch ein paar Codezeilen zu /etc/profile hinzufügen, die Umgebungsvariablen des Containers selbst von Prozess Nr. 1 abrufen und dann die Umgebungsvariablen in einer Schleife exportieren.

Es folgt eine einfache Implementierung einer For-Schleife.

für Element in `cat /proc/1/environ |tr '\0' '\n'`
Tun
 $item exportieren
Erledigt

Natürlich gibt es einen prägnanteren Befehl, nämlich „export $(cat /proc/1/environ |tr '\0' '\n' | xargs), der denselben Effekt erzielen kann.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Docker löst das Problem, dass das Terminal kein Chinesisch eingeben kann
  • Docker legt Port 2375 frei, was zu Serverangriffen und -lösungen führt
  • Installieren Sie Jenkins mit Docker und lösen Sie das Problem des anfänglichen Plugin-Installationsfehlers
  • Beheben Sie das Problem, dass der Docker-Container das externe Netzwerk nicht anpingen kann
  • Beim Einrichten von Jenkins in einer Docker-Umgebung werden im Konsolenprotokoll beim Erstellen von Aufgaben verstümmelte chinesische Zeichen angezeigt
  • Lösung für das Problem, dass Docker-Protokolle nicht abgerufen werden können
  • Teilen Sie das Problem, dass Ubuntu 19 die Docker-Quelle nicht installieren kann
  • Häufig gestellte Fragen zu Docker

<<:  MySQL mit Nutzungsanalyse

>>:  So verwenden Sie die JSZip-Komprimierung in CocosCreator

Artikel empfehlen

Implementierung der Vorschaufunktion mehrerer Bild-Uploads auf HTML-Basis

Ich habe vor kurzem ein Skript zum Hochladen mehr...

Detaillierte Erklärung der Concat-bezogenen Funktionen in MySQL

1. concat()-Funktion Funktion: Mehrere Zeichenfol...

CSS-Code zur Unterscheidung von IE8/IE9/IE10/IE11 Chrome Firefox

Das Debuggen der Website-Kompatibilität ist wirkl...

MySQL 5.6.23 Installations- und Konfigurations-Umgebungsvariablen-Tutorial

In diesem Artikel finden Sie das Installations- u...

MySQL 5.7.20 Green Edition Installation Detailliertes grafisches Tutorial

Lassen Sie uns zunächst verstehen, was MySQL ist....

Lösen Sie das Problem der Kombination von AND und OR in MySQL

Wie unten dargestellt: Wählen Sie Produktname, Pr...

So verwenden Sie Port 80 in Tomcat unter Linux

Anwendungsszenario In vielen Fällen installieren ...

Acht Möglichkeiten zur Implementierung von Kommunikation in Vue

Inhaltsverzeichnis 1. Komponentenkommunikation 1....

Details zur Bündelung statischer Ressourcen ohne JavaScript

Inhaltsverzeichnis 1. Benutzerdefinierter Import ...

So verwenden Sie MQTT im Uniapp-Projekt

Inhaltsverzeichnis 1. Referenz-Plugins im Uniapp ...

So implementieren Sie Leerzeichen in Taobao mit CSS3

Machen Sie einen leeren Bereich für Taobao: Wenn ...

MySQL-Index für Anfänger

Vorwort Da die wichtigste Datenstruktur im MySQL-...