2017-10-11 3 views
-1

Ich habe die (hypothetische) Programm dhprog zu Docker Hub hochgeladen, und es funktioniert wie folgt:Wie kann der Docker Befehlszeile für den Benutzer kürzer ausführen?

docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" --rm -it dhuser/dhimage dhprog arg1 arg2 

Die Nicht-dockerized Version des Programms funktioniert wie folgt:

dhprog arg1 arg2 

Ich habe -v, weil ich das aktuelle Verzeichnis als /workdir im Container zur Verfügung stellen möchte (wenn also arg1 ein Dateiname außerhalb des Containers ist, kann dhprog im Container diese Datei lesen).

Ich habe -u weil ich dhprog in dem Behälter als nicht-root ausgeführt werden soll, und wenn arg2 eine Ausgabedatei ist, sollte sie es außerhalb des Behälters als die gleiche UID und GID schreiben, die den docker run Befehl aufgerufen hat.

Wie kann ich die docker run Befehlszeile kürzer für den Benutzer, vor allem die -v und -u Fahnen, ohne die 2-Funktionen zu beeinträchtigen (Lesen und Schreiben von Dateien außerhalb des Behälters) und Dateien außerhalb des Behälters als nicht schriftlich root, aber als der anrufende Benutzer?

+1

Wie wäre es Bash-Aliase einrichten? –

+0

Zum Downvoter: Wie kann ich diese Frage verbessern? – pts

Antwort

1

Die einzige echte Option ist hier, ein Shell-Skript zu verteilen, das alles für Sie einpackt. Zum Beispiel eine Shell-Skript dhprog genannt, die wie folgt aussieht:

#!/bin/sh 
exec docker run -v "$PWD:/workdir" -u "$(id -u):$(id -g)" \ 
    --rm -it dhuser/dhimage dhprog "[email protected]" 

ich vermeiden würde bash Aliase, denn es gibt viele Situationen, in denen diese Aliase nicht verfügbar sein, während ein Skript in $PATH funktioniert wie jeder andere binären .

1
  1. Erstellen Sie ein Skript mit dem, dass Sie Ihren Befehl als lokales Skript im Home-Verzeichnis des Benutzers "installieren".

  2. Veröffentlichen Sie es online als eine einfache Textseite unter Verwendung einer Domäne, die Sie besitzen, oder in einem Repository, das es über einen Dienst wie rawgit freigibt.

  3. Jetzt können Sie es mit einem wie diese Kopie & Paste Schnipsel verteilen:

    curl -s "http://example.com/dhprog" | bash

Heute gibt viele Beispiel für diesen Ansatz sind, können Sie zum Beispiel sehen die sdkman installation script, die oben beschrieben auf die gleiche Weise ausgeführt wird.

  1. Jetzt wird der Benutzer eine dhprog in seiner Shell haben.

  2. Bonus: Wenn Sie gut im Scripting sind, können Sie sogar die Benutzer-Shell zwingen, jedes Mal, wenn eine neue Shell erstellt wird, nach einem Update Ihres Programms (dem Skript) zu suchen (zB wie oh-my-zsh) .

1

Sparrow ist ganz praktisch für eine solche Aufgabe:

$ cat story.bash 
set -e 
path=$(config path) 
docker run -v "$path:/workdir" -u "$(id -u):$(id -g)" \ 
--rm -it dhuser/dhimage dhprog \ 
$(cli_args) 

$ cat sparrow.json 
{ 
    "name" : "docker-dhprog", 
    "version" : "0.0.1" 
} 
$ sparrow plg upload 

Auf anderen Server, auf dem Spatz installiert ist, nur:

$ sparrow plg install docker-dhprog 
$ sparrow plg run docker-dhprog --param path=$PWD -- arg1 arg2 
Verwandte Themen