Danke, aber eine plattformabhängige Kommandozeilen-Utility im Plugin, um diese Informationen zu erhalten, funktioniert für mich (wie erforderlich) nicht (das Abrufen der Docker-ID über den folgenden Befehl funktioniert in unserer Ubuntu 18.04-Umgebung nicht):
# cat /proc/self/cgroup|grep "systemd:/docker"| awk -F/ '{print $3}'|cut -c1-12
#. (keine Ergebnisse)
Selbst dies bringt keine Ergebnisse:
# cat /proc/self/cgroup|grep "systemd:/docker"
# (keine Ergebnisse)
FYI (aus docker ps):
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
63c52bc571b5 local_discourse/socket-only "/sbin/boot" 28 minutes ago Up 28 minutes socket-only
631fbabedda9 local_discourse/socket-only2 "/sbin/boot" 26 hours ago Up 26 hours socket-only2
123743e12208 mysql/mysql-server "/entrypoint.sh mysq…" 2 days ago Up 20 hours (healthy) 33060/tcp, 0.0.0.0:6603->3306/tcp mysql-man
7a145366268c registry.unix.com/unix:condor "/run.sh" 6 days ago Up 20 hours 3306/tcp, 0.0.0.0:8999->80/tcp unix
3cc0c90c3e3a registry:2 "/entrypoint.sh /etc…" 7 days ago Up 7 days 0.0.0.0:5000->5000/tcp hubby
ca7b55fc5a0c local_discourse/data "/sbin/boot" 2 weeks ago Up 8 days data
Das bedeutet, dass die Information (die Zeichenkette, die den Namen des laufenden Containers angibt) aus einer Umgebungsvariable in der yml-Datei abgeleitet werden sollte, um sicherzustellen, dass die Information plattformunabhängig ist und funktioniert, wenn viele Container gleichzeitig laufen.
Zum Beispiel betreiben wir mehrere Discourse-Apps und andere Container gleichzeitig, sodass die Verwendung von docker-cli-Befehlen nicht die genauen Informationen liefert, die wir benötigen (den Namen des laufenden Containers im Web „zum Zeitpunkt der Anfrage“, der durch die Reverse-Proxy-Konfiguration bestimmt wird, nicht durch Docker).
Wir wählen den anzuzeigenden Container aus, indem wir den Namen des Unix-Sockets (oder den exponierten Container-Port) in der Reverse-Proxy-Konfiguration ändern, sodass wir den Container in weniger als einer Sekunde ohne Ausfallzeit wechseln. Das bedeutet, dass der Name des Containers (muss) aus einer Umgebungsvariable in der yml-Datei stammen, um zu 100 % zuverlässig und korrekt zu sein.
Daher meine Anforderung, dass die Zeichenkette (Name des Containers, Container-ID usw.) ausschließlich aus Umgebungsvariablen in der yml-Datei stammen soll.
Für alle, die die Container-ID bevorzugen, könnten sie diese wie folgt zu ihrer Umgebungsvariable hinzufügen (Beispiel):
DISCOURSE_APP_CONTAINER_NAME = 'socket-only (63c52bc571b5)'
oder sogar:
DISCOURSE_APP_CONTAINER_NAME = '63c52bc571b5'
DISCOURSE_DATA_CONTAINER_NAME = 'ca7b55fc5a0c'
und gemäß meinem ursprünglichen Beitrag (so wie wir es verwenden möchten):
DISCOURSE_APP_CONTAINER_NAME = 'socket-only'
DISCOURSE_DATA_CONTAINER_NAME = 'data'
Welche Zeichenkette (Token) als Identifier (Name, Container-ID oder beides) verwendet wird, hängt von den Anforderungen des Systemadministrators (oder des Unternehmens) ab.
Deshalb habe ich ausdrücklich festgelegt, dass die Information als Umgebungsvariable in der Haupt-yml-Datei der App hartkodiert sein muss (nicht über CLI-Befehle wie docker ps oder andere OS- (plattformabhängige) Befehle).
Ich hoffe, das macht meine Anforderung klarer.
Ich möchte, dass dies plattform- und konfigurationsneutral ist und nicht von CLI-Befehlen oder Systembefehlen abhängt. Wir betreiben Docker für viele andere Apps und nicht nur für Discourse auf unseren Servern (einschließlich Discourse, Dockerisierte LAMP-Apps, private Docker-Registries und mehr, wie Sie am Beispiel-Output von docker ps oben sehen können.).