0

I would like to use metabase in a Windows 10 (not Pro) docker container accessing my data that comes SSH port forwarded from a remote PostgreSQL instance.

  1. I've set up Putty to port forward from the remote host port 5432 to local 127.0.0.1:5432. I could connect to remote DB using pgAdmin running on localhost. ✔
  2. I've set up the Virtualbox docker host image to port forward on the NAT card the host port 127.0.0.1:5432 to the guest port 5432 (without providing an IP).
  3. I've run docker-machine ip default to find the ip of the docker host. It's 192.168.99.100 ✔
  4. Finally, I've set up the metabase docker environment variables as docker run -d -p 3000:3000 \ -e "MB_DB_TYPE=postgres" \ -e "MB_DB_DBNAME=<my db name>" \ -e "MB_DB_PORT=5432" \ -e "MB_DB_USER=<username>" \ -e "MB_DB_PASS=<password>" \ -e "MB_DB_HOST=192.168.99.100" \ --name metabase metabase/metabase

Still I can't connect to postgres instance. What might be wrong with my setup? In which step do I err on providing the proper IP? How can I test easily after step 3 that my db should be accessible from inside a docker container?

``` 08-16 10:23:07 INFO metabase.util :: Loading Metabase... 08-16 10:23:15 INFO util.encryption :: Saved credentials encryption is DISABLED for this Metabase instance. For more information, see https://www.metabase.com/docs/latest/operations-guide/start.html#encrypting-your-database-connection-details-at-rest 08-16 10:23:33 INFO metabase.core :: Starting Metabase in STANDALONE mode 08-16 10:23:33 INFO metabase.core :: Launching Embedded Jetty Webserver with config: {:port 3000, :host "0.0.0.0"}

08-16 10:23:33 INFO metabase.core :: Starting Metabase version v0.30.0 (04836dc release-0.30.0) ... 08-16 10:23:33 INFO metabase.core :: System timezone is 'GMT' ... WARNING: any? already refers to: #'clojure.core/any? in namespace: monger.collection, being replaced by: #'monger.collection/any? 08-16 10:23:35 INFO metabase.core :: Setting up and migrating Metabase DB. Please sit tight, this may take a minute... 08-16 10:23:35 INFO metabase.db :: Verifying postgres Database Connection ... Aug 16, 2018 10:23:36 AM org.postgresql.core.v3.ConnectionFactoryImpl log WARNING: ConnectException occurred while connecting to 192.168.99.100:5432 java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at org.postgresql.core.PGStream.(PGStream.java:69) at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:156) at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) at org.postgresql.jdbc.PgConnection.(PgConnection.java:195) at org.postgresql.Driver.makeConnection(Driver.java:452) at org.postgresql.Driver.connect(Driver.java:254) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:208) at clojure.java.jdbc$get_connection.invokeStatic(jdbc.clj:370) at clojure.java.jdbc$get_connection.invoke(jdbc.clj:229) at clojure.java.jdbc$db_query_with_resultset_STAR_.invokeStatic(jdbc.clj:1023) at clojure.java.jdbc$db_query_with_resultset_STAR_.invoke(jdbc.clj:1005) at clojure.java.jdbc$query.invokeStatic(jdbc.clj:1099) at clojure.java.jdbc$query.invoke(jdbc.clj:1056) at clojure.java.jdbc$query.invokeStatic(jdbc.clj:1072) at clojure.java.jdbc$query.invoke(jdbc.clj:1056) at metabase.driver.generic_sql$can_connect_QMARK_.invokeStatic(generic_sql.clj:209) at metabase.driver.generic_sql$can_connect_QMARK_.invoke(generic_sql.clj:206) at metabase.driver$fn__28294$G__28047__28301.invoke(driver.clj:104) at metabase.driver$can_connect_with_details_QMARK_$fn__28424.invoke(driver.clj:516) at clojure.core$binding_conveyor_fn$fn__5476.invoke(core.clj:2022) at clojure.lang.AFn.call(AFn.java:18) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745)

Aug 16, 2018 10:23:36 AM org.postgresql.Driver connect SEVERE: Connection error: org.postgresql.util.PSQLException: Connection to 192.168.99.100:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:245) at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49) at org.postgresql.jdbc.PgConnection.(PgConnection.java:195) at org.postgresql.Driver.makeConnection(Driver.java:452) at org.postgresql.Driver.connect(Driver.java:254) at java.sql.DriverManager.getConnection(DriverManager.java:664) at java.sql.DriverManager.getConnection(DriverManager.java:208) at clojure.java.jdbc$get_connection.invokeStatic(jdbc.clj:370) at clojure.java.jdbc$get_connection.invoke(jdbc.clj:229) at clojure.java.jdbc$db_query_with_resultset_STAR_.invokeStatic(jdbc.clj:1023) at clojure.java.jdbc$db_query_with_resultset_STAR_.invoke(jdbc.clj:1005) at clojure.java.jdbc$query.invokeStatic(jdbc.clj:1099) at clojure.java.jdbc$query.invoke(jdbc.clj:1056) at clojure.java.jdbc$query.invokeStatic(jdbc.clj:1072) at clojure.java.jdbc$query.invoke(jdbc.clj:1056) at metabase.driver.generic_sql$can_connect_QMARK_.invokeStatic(generic_sql.clj:209) at metabase.driver.generic_sql$can_connect_QMARK_.invoke(generic_sql.clj:206) at metabase.driver$fn__28294$G__28047__28301.invoke(driver.clj:104) at metabase.driver$can_connect_with_details_QMARK_$fn__28424.invoke(driver.clj:516) at clojure.core$binding_conveyor_fn$fn__5476.invoke(core.clj:2022) at clojure.lang.AFn.call(AFn.java:18) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.net.ConnectException: Connection refused (Connection refused) at java.net.PlainSocketImpl.socketConnect(Native Method) at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) at java.net.Socket.connect(Socket.java:589) at org.postgresql.core.PGStream.(PGStream.java:69) at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:156) ... 24 more

08-16 10:23:36 ERROR metabase.driver :: Failed to connect to database: org.postgresql.util.PSQLException: Connection to 192.168.99.100:5432 refused. Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections. 08-16 10:23:36 ERROR metabase.core :: Metabase Initialization FAILED java.lang.AssertionError: Assert failed: Unable to connect to Metabase postgres DB. (binding [allow-potentailly-unsafe-connections true] (require (quote metabase.driver)) ((resolve (quote metabase.driver/can-connect-with-details?)) engine details)) at metabase.db$verify_db_connection.invokeStatic(db.clj:365) at metabase.db$verify_db_connection.invoke(db.clj:358) at metabase.db$verify_db_connection.invokeStatic(db.clj:361) at metabase.db$verify_db_connection.invoke(db.clj:358) at metabase.db$setup_db_BANG_.invokeStatic(db.clj:427) at metabase.db$setup_db_BANG_.doInvoke(db.clj:421) at clojure.lang.RestFn.invoke(RestFn.java:421) at metabase.core$init_BANG_.invokeStatic(core.clj:161) at metabase.core$init_BANG_.invoke(core.clj:138) at metabase.core$start_normally.invokeStatic(core.clj:245) at metabase.core$start_normally.invoke(core.clj:239) at metabase.core$_main.invokeStatic(core.clj:265) at metabase.core$_main.doInvoke(core.clj:260) at clojure.lang.RestFn.invoke(RestFn.java:397) at clojure.lang.AFn.applyToHelper(AFn.java:152) at clojure.lang.RestFn.applyTo(RestFn.java:132) at metabase.core.main(Unknown Source) 08-16 10:23:36 INFO metabase.core :: Metabase Shutting Down ... 08-16 10:23:36 INFO metabase.core :: Metabase Shutdown COMPLETE ```

Akasha
  • 2,162
  • 1
  • 29
  • 47
  • from https://docs.docker.com/toolbox/toolbox_install_windows/ : `Install Docker Toolbox on Windows Legacy desktop solution. Docker Toolbox is for older Mac and Windows systems that do not meet the requirements of Docker for Mac and Docker for Windows. We recommend updating to the newer applications, if possible. ` says it all – Edwin Aug 16 '18 at 10:37
  • @Edwin, my windows does not meet the requirements. As it's not pro, it does not have hyper-v support – Akasha Aug 16 '18 at 11:21
  • Did you try to use `--network="host"` when starting your container. This way your container uses the Docker host network stack. And if your DB is accessible from local network of host, then it should be accessible from the container ! See https://docs.docker.com/engine/reference/run/#network-settings – gcharbon Aug 16 '18 at 13:26
  • Why can’t you just directly use the remote database host’s DNS name or IP address? – David Maze Aug 16 '18 at 14:27

0 Answers0