2016-05-10 11 views
0

Ich versuche Docker-compose zu verwenden, um meine zu verbinden clojure compojure app mit einem rethinkdb Behälter:Kupplung Compojure Anwendung mit rethinkdb und Docker-komponieren

Docker-compose.yml:

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

jedoch ich erhalte einen Fehler

„Fehler zu RethinkDB Datenbank verbinden“

Mein 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}))) 

Das Problem tritt auf, wenn ich 127.0.0.1:8080/users getroffen, welche die Strecke ist, die den rethinkdb Code aufruft. Um den Dienst zu starten, starte ich docker-compose up -d. Ich nahm den Code, der zu rethinkdb von https://github.com/apa512/clj-rethinkdb verbindet.

Dies ist der Fehler, den ich von meinen Web-Containern Protokollen erhalten:

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

Nun versucht es immer noch mit '127.0.0.1' statt' rethinkdb' zu verbinden. –

Antwort

0

Was ich versuchen würde: ein REPL Port aus der Web-Anwendung öffnen, so dass Sie aus dem REPL diagnostizieren können. Das ist schließlich Clojure.

Überprüfen Sie auch: Können Sie sich mit einem anderen Umdenk-Client verbinden, während docker-compose läuft?

1

So war die Frage in meinem Docker-compose.yml - Ich brauchte die rethinkdb 28015 Port sowohl für Container- und Host zu entlarven:

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

Sobald ich diese Aktualisierung war ich erfolgreich in der Lage meiner rethinkdb verbinden Container von meinem Clojure Container.