gpt4 book ai didi

docker - 如何在Docker容器中替换Uberjar?

转载 作者:行者123 更新时间:2023-12-02 20:38:05 24 4
gpt4 key购买 nike

我发现REPL是功能强大且有用的工具。目前,我运行:lein repl通过REPL与我的Clojure应用进行交互。但是,最近我刚刚将项目容器化。该应用程序现在作为单个独立的uberjar文件位于docker容器中。

因此,我想知道如何在Docker容器内的uberjar文件上运行REPL?

最佳答案

从Clojure 1.8开始,您可以指定JVM option to host a 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中的 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=>

或者,您可以按照 this answer中所述从应用程序代码中托管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连接到它。

关于docker - 如何在Docker容器中替换Uberjar?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50018490/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com