Начиная с Clojure 1.8, вы можете указать опцию JVM для размещения REPL без внесения каких-либо изменений в ваше скомпилированное приложение:
-Dclojure.server.repl="{:port 5555 :accept clojure.core.server/repl}"
В вашей Dockerfile
ваша основная команда будеттеперь выглядит примерно так:
java -Dclojure.server.repl="{:port 5555 :accept clojure.core.server/repl}" -jar path/to/app.jar
Вы также можете добавить эту опцию в Leiningen project.clj
вместо командной строки:
:jvm-opts ["-Dclojure.server.repl={:port 5555 :accept clojure.core.server/repl}"]
Пока ваше приложение работает, вы должны иметь возможностьдля подключения к этому сокету, предполагая, что ваш контейнер имеет открытый порт (EXPOSE 5555
in Dockerfile
):
$ telnet 127.0.0.1 5555
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
user=> (+ 1 1)
2
user=> (doto 'sandbox.main require in-ns)
sandbox.main
sandbox.main=>
В качестве альтернативы, вы можете разместить REPL из кода вашего приложения, как описано в этот ответ .
(ns sandbox.main
(:require [clojure.tools.nrepl.server :as serv]))
(defn -main []
(serv/start-server :port 7888)
... do other stuff ...)
и подключиться к нему с помощью lein repl :connect localhost:7888
.