2014-02-22 38 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来启动您的应用程序。

相关问题