2014-02-22 33 views
3

我想在a Clojure Docker image執行lein run了一個安裝文件夾,是不是/的,但是當我嘗試cd到一個文件夾,碼頭工人與unable to locate cd抱怨:在安裝文件夾中運行Docker映像檔命令

docker run -v /root/chortles:/test -i jphackworth/docker-clojure cd /test && lein run 
=> Unable to locate cd 

如何指示Leiningen運行在不同的文件夾中,或者告訴Docker在運行我的命令之前更改目錄?

+0

它看起來像你的問題是,「CD」不是一個程序(不能:它將不得不改變其父進程的工作目錄)。相反,它是一個內置的shell。我不知道碼頭工人,所以我不知道解決方案是什麼。 – Max

回答

7

可以使用-w參數有關docker run。該參數對於在容器中指定工作目錄很有用。

docker run -w /test -v /root/chortles:/test -i jphackworth/docker-clojure lein run 
0

最好的辦法是給docker鏡像添加一個shell腳本並調用它。

有一個叫做lein-wrapper.sh的腳本,安裝在/ usr/local/bin中。腳本應該整理leiningen的環境然後調用它。事情是這樣的:

#!/bin/sh 
export PATH=${LEININGEN_INSTALL}:${PATH} 
cd /test 
lein [email protected] 

您可以設置

ENTRYPOINT["/usr/local/bin/lein-wrapper.sh"] 

在你Dockerfile

並調用它爲:

# Will call /usr/local/bin/lein-wrapper.sh run 
# which will call lein run 
docker run -v /root/chortles:/test -i jphackworth/docker-clojure run 

# or run lein deps... 
docker run -v /root/chortles:/test -i jphackworth/docker-clojure deps 
0

cdbash builtin,而不是一個命令。您可以使用bash -c 'cd /test && lein run'。更好的是,按照@Jiri的說法並使用-w參數來設置容器的工作目錄,然後使用lein run來啓動您的應用程序。

相關問題