将Compojure应用程序与rethinkdb和docker-compose耦合

我正在尝试使用clojure compojure app -compose将我的clojure compojure apprethinkdb容器相关联:

docker-compose.yml

 version: "2" services: web: build: . ports: - "8080:8080" links: - rethinkdb rethinkdb: image: rethinkdb ports: - "8080" - "28015" - "29015" 

但是我不断收到一个错误

“连接到RethinkDB数据库时出错”

我的handler.clj

 (ns test.handler (:gen-class) (:require [compojure.core :refer :all] [compojure.route :as route] [environ.core :refer [env]] [ring.middleware.defaults :refer [wrap-defaults site-defaults]] [ring.middleware.reload :as reload] [rethinkdb.query :as r]) (:use org.httpkit.server [compojure.handler :only [site]])) (defn users [request] (with-open [conn (r/connect :host "rethinkdb" :port 28015 :db "test")] (r/run (r/db-create "test") conn) (-> (r/db "test") (r/table-create "authors") (r/run conn)))) (defroutes app-routes (GET "/" [] { :status 200 :headers {"Content-Type" "text/html"} :body "Server running!"}) (GET "/users" [] users)) (defn -main [& args] ;; entry point, lein run will pick up and start from here (let [handler (if (in-dev?) (reload/wrap-reload (site #'app-routes)) ;; only reload when dev (site app-routes))] (run-server handler {:port 8080}))) 

当我点击127.0.0.1:8080/users这是调用rethinkdb代码的路由)时,就会出现这个问题。 要启动服务,我正在运行docker-compose up -d 。 我从https://github.com/apa512/clj-rethinkdb获取了连接到rethinkdb的代码。

这是我从我的Web容器日志中得到的错误:

 SEVERE: Error connecting to RethinkDB database java.net.ConnectException: Connection refused: /127.0.0.1:28015 

所以这个问题是在我的docker-compose.yml中 – 我需要为容器和主机公开rethinkdb 28015端口:

  rethinkdb: image: rethinkdb ports: - "8080" - "28015:28015" 

一旦我更新了这个,我成功地能够连接到我的clojure容器中的rethinkdb容器。

我会尝试:从Web应用程序打开REPL端口,以便您可以从REPL进行诊断。 毕竟这是Clojure。

还值得检查:docker-compose正在运行时,你能连接一个不同的反思客户端吗?