2017-10-11 50 views
-1

我上傳的(假設的)程序dhprog至泊塢樞紐,它的工作原理是這樣的:如何使碼頭運行命令行縮短爲用戶?

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

該計劃的非dockerized版本是這樣的:

dhprog arg1 arg2 

我有-v,因爲我想使容器中的當前目錄可用爲/workdir(因此,如果arg1是容器外的文件名,則容器中的dhprog可以讀取該文件)。

我有-u因爲我想在容器中作爲非root身份運行dhprog,如果arg2是一個輸出文件名,就應該把它寫在容器爲相同的UID和GID誰已經調用了docker run命令之外。

如何使用戶的docker run命令行短,尤其是-v-u標誌,而不損害2個特徵(讀取和容器外部的文件的寫入)和作爲非外部寫入所述容器文件根,但作爲調用用戶?

+1

如何創建慶典別名? –

+0

對於downvoter:我該如何改進這個問題? – pts

回答

1

這裏唯一真正的選擇是分發一個包含所有這些的shell腳本。例如,創建一個名爲dhprog一個shell腳本,看起來像:

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

我會避免bash的別名,因爲有這些別名將無法使用在許多情況下,而在$PATH作品就像任何其他的二進制腳本。

1
  1. 創建一個腳本,將「安裝」命令作爲本地腳本安裝在用戶主目錄中。

  2. 將它作爲純文本頁面在線發佈,使用您自己的域名或者通過類似rawgit的服務將其公開。

  3. 現在你可以用複製粘貼&片斷這樣的分發:

    捲曲-s 「http://example.com/dhprog」 |慶典

今天,有這種方法的許多例子,你可以看到,例如,在上述同樣的方式運行sdkman installation script

  1. 現在用戶將有一個dhprog在他的shell中可用。獎勵:如果你擅長編寫腳本,你甚至可以強制用戶shell在每次創建新shell時檢查程序的更新(腳本)(例如像oh-my-zsh一樣) 。

1

Sparrow是這樣的任務非常方便:

$ 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 

在安裝了麻雀等服務器,只需:

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