Ich verwende eine GUI eines Drittanbieters (Synology Docker-Paket), um einen Docker-Container einzurichten. Aufgrund seiner Einschränkung muss ich den Container jedoch über die Befehlszeile ausführen. (Ich möchte eine andere Host-IP zuordnen, um den Port zu binden.)
Da bereits viele Einstellungen vorgenommen wurden, möchte ich den ursprünglichen Ausführungsbefehl abrufen, mit dem dieser Container gestartet wird, und dann den Portzuordnungsport in einen neuen ändern. z.B. " docker run -p 80:8080 gitlab
"
Ich kann den Weg dazu nicht finden, Ereignis verwenden "Docker Inspect", keine solchen Informationen bereitgestellt.
Bitte geben Sie einige Ratschläge, um dieses Problem zu lösen.
Antworten:
Es gibt ein Github-Repository, das versucht, den Docker-Ausführungsbefehl rückzuentwickeln, aber es ist derzeit nicht perfekt, Version ist
0.1.2
. Sie sollten es zur Aktualisierung befolgen. Vielleicht können Sie es eines Tages verwenden, um den richtigen Ausführungsbefehl damit zu erhalten.Github-Repository: runlike
Aktualisierung:
Ohne Installation ausführen (Danke @tilo)
quelle
docker run -v /var/run/docker.sock:/var/run/docker.sock \ assaflavie/runlike YOUR-CONTAINER
Verwenden Sie Docker Inspect :
Sie können dies programmgesteuert mit jq analysieren :
quelle
docker inspect <CONTAINER> | jq ".[0].Config.Cmd"
"Cmd": null,
Vielleicht funktioniert das nur, wenn der Container nicht automatisch als Docker-Daemon gestartet wurde?Ich habe ein einfaches knotenbasiertes CLI-Tool geschrieben, um einen
docker run
Befehl aus einem vorhandenen Container zu generieren .https://www.npmjs.com/package/rekcod
Hier ist ein Beispiel:
Behandelt auch Links und gemountete Volumes und andere Dinge.
Im Moment nicht besonders robust, handhabt aber mehr als einige der anderen genannten Dinge, und es war mehr von dem, wonach ich gesucht habe.
BEARBEITEN: In einem einzigen Befehl, ohne Software zu installieren:
quelle
Eine einfachere (?) Alternative besteht darin, diese Docker-Inspektionsvorlage auszuführen , die die integrierten Go- Vorlagenfunktionen verwendet , um einen
docker run
kompatiblen Befehl auszugeben . Die Vorlage deckt nur die gängigsten Befehlszeilenoptionen ab, kann jedoch problemlos erweitert werden.Diese Lösung hat keine Abhängigkeiten von anderen Tools außer Docker selbst.
quelle
Verwenden Sie den folgenden Befehl, um die Argumente für alle Container abzurufen. Docker inspect -f "{{.Name}} {{.Path}} {{.Args}}" $ (Docker ps -a -q)
quelle
Derzeit scheint es so, als müssten wir 'Docker Inspect' ausführen und dann den Befehl run manuell neu erstellen.
Ich habe jemanden gefunden, der versucht, ein Bash-Skript zu schreiben, um dies zu tun: https://gist.github.com/miracle2k/c85b7b077fdb8d54bc89
aber es ist unvollständig und hängt von jq ab.
quelle
Eine einfachere (robuste) Option könnte darin bestehen , Befehle wie bash-preexec zu verwenden, um Befehle zu erfassen, die mit "Docker Run" beginnen. Sie können diese Befehle dann irgendwo speichern und später abrufen.
Sie können beispielsweise Ihrem Bash-Profil Folgendes hinzufügen:
Dann könnten Sie einfach Ihre Sachen laufen lassen:
Welche Ausgänge:
quelle
Wenn Sie nichts in Ihr aktuell ausgeführtes Docker-Server-Setup installieren möchten, können Sie es einfach ausführen (durch
$CONTAINER_NAME
den Containernamen ersetzen, für den Sie die Ausführungsargumente haben möchten):(für die
rekcod
Methode )oder
(für die
runlike
Methode )quelle
Dieser Docker-Ausführungsbefehl ist weder in der Docker-Datei noch in anderen Docker-bezogenen Dokumenten angegeben.
Entweder finden Sie ein Beispiel in der Dokumentation zu Ihrem Container, oder Sie können daraus schließen, dass Docker mit (zumindest für die Befehls- und Portzuordnung) a ausgeführt wird
docker ps -a
(dies gibt Ihnen jedoch nicht die Möglichkeit--volumes-from
bietet Optionen).Überprüfen Sie auch
/usr/syno/etc/packages/Docker-GitLab/config
Dies unterscheidet sich von der gitlab-Konfiguration selbst, die unter Synology verfügbar ist
/usr/syno/etc/packages/Docker/synology_gitlab.config
quelle
Um den Docker-Ausführungsbefehl umzukehren, gibt es auch das folgende npm-Paket.
https://github.com/nexdrew/rekcod
quelle
Alle Docker-Dateien sind hier. Sie finden cmd und Mounts zum Beispiel
ls -la /proc/1
einfach cat itquelle