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

Detaillierte Analyse des React Diff-Prinzips

Inhaltsverzeichnis Diffing-Algorithmus Schicht-fü...

WebWorker kapselt JavaScript-Sandbox-Details

Inhaltsverzeichnis 1. Szenario 2. Implementieren ...

Eine kurze Analyse der MySQL-Sicherung und -Wiederherstellung

Inhaltsverzeichnis 1. Einleitung 2. Einfache Defi...

Ausführliche Erklärung zu Sitzung und Cookie in Tomcat

Vorwort HTTP ist ein zustandsloses Kommunikations...

Wie oft werden mehrere setStates in React aufgerufen?

Inhaltsverzeichnis 1. Zwei setState, wie oft soll...

CentOS 7.x Docker verwendet die Overlay2-Speichermethode

Bearbeiten Sie /etc/docker/daemon.json und fügen ...

Lösen Sie das Problem der Docker-Protokollmontage

Der Schlüssel ist, dass der lokale Server keine S...

VMware Workstation 14 Pro installiert CentOS 7.0

Die spezifische Methode zur Installation von Cent...

MySQL extrahiert zufällig eine bestimmte Anzahl von Datensätzen

Früher habe ich zur Handhabung dieser Art von Nut...

CSS: besuchte geheime Erinnerungen des Pseudoklassenselektors

Gestern wollte ich a:visited verwenden, um die Fa...