在挂载的文件夹中运行Docker镜像命令

我试图执行lein run在一个Clojure Docker镜像中 ,但是当我尝试cd到一个文件夹时,Docker抱怨unable to locate cd

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

我如何指示Leiningen运行在不同的文件夹中,或者告诉Docker在运行我的命令之前更改目录?

你可以使用-w param来docker run 。 该参数对于在容器中指定工作目录很有用。

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

最好的select是给Docker镜像添加一个shell脚本并调用它。

有一个叫做lein-wrapper.sh的脚本,安装在/ usr / local / bin中。 脚本应该整理leiningen的环境然后调用它。 像这样的东西:

 #!/bin/sh export PATH=${LEININGEN_INSTALL}:${PATH} cd /test lein $@ 

你可以设置

 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 

cd是一个bash内build的 ,而不是一个命令。 你可以使用bash -c 'cd /test && lein run' 。 更好的是,像@Jiri一样,使用-w参数来设置容器的工作目录,然后使用lein run来启动你的应用程序。