0

I tried to run the following schemacrawler container on my Ubuntu 18.04 machine:

docker run \
--mount type=bind,source="$(pwd)",target=/home/schcrwlr \
--rm -it \
schemacrawler/schemacrawler:v16.19.7 \
/opt/schemacrawler/bin/schemacrawler.sh \
--server postgresql \
--host localhost \
--user postgres \
--password pass \
--database detections \
--info-level standard \
--command schema \
--output-file output.png

And got the following error:

Error: Could not connect to <jdbc:postgresql://localhost:5432/detections>, for <user 'postgres'>, with properties <{}>
java.lang.RuntimeException: Could not connect to <jdbc:postgresql://localhost:5432/detections>, for <user 'postgres'>, with properties <{}>
    at us.fatehi.utility.datasource.AbstractDatabaseConnectionSource.getConnection(AbstractDatabaseConnectionSource.java:131)
    at us.fatehi.utility.datasource.SimpleDatabaseConnectionSource.get(SimpleDatabaseConnectionSource.java:112)
    at us.fatehi.utility.datasource.SimpleDatabaseConnectionSource.get(SimpleDatabaseConnectionSource.java:49)
    at schemacrawler.tools.commandline.command.ConnectCommand.loadSchemaRetrievalOptionsBuilder(ConnectCommand.java:180)
    at schemacrawler.tools.commandline.command.ConnectCommand.run(ConnectCommand.java:124)
    at schemacrawler.tools.commandline.SchemaCrawlerCommandLine.executeCommandLine(SchemaCrawlerCommandLine.java:110)
    at schemacrawler.tools.commandline.SchemaCrawlerCommandLine.execute(SchemaCrawlerCommandLine.java:72)
    at schemacrawler.Main.main(Main.java:76)
Caused by: org.postgresql.util.PSQLException: Connection to localhost: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:319)
    at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:49)
    at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:247)
    at org.postgresql.Driver.makeConnection(Driver.java:434)
    at org.postgresql.Driver.connect(Driver.java:291)
    at us.fatehi.utility.datasource.AbstractDatabaseConnectionSource.getConnection(AbstractDatabaseConnectionSource.java:122)
    ... 7 more
Caused by: java.net.ConnectException: Connection refused (Connection refused)
    at java.base/java.net.PlainSocketImpl.socketConnect(Native Method)
    at java.base/java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:412)
    at java.base/java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:255)
    at java.base/java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:237)
    at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
    at java.base/java.net.Socket.connect(Socket.java:609)
    at org.postgresql.core.PGStream.createSocket(PGStream.java:241)
    at org.postgresql.core.PGStream.<init>(PGStream.java:98)
    at org.postgresql.core.v3.ConnectionFactoryImpl.tryConnect(ConnectionFactoryImpl.java:109)
    at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:235)*

I edited the file postgresql.conf to listen to all available IP addresses, listen_addresses = ''*, and edited pg_hba.conf file to allow TCP/IP connections to all databases for all users with any IPv4 address: host all all 0.0.0.0/0 md5 but the problem persisted...

laos
  • 1
  • What steps have you taken to check that postgresql is actually running on that port in the container and that it has started up before whatever schemacrawler starts up? – Richard Huxton Feb 03 '23 at 13:19
  • 1
    In Docker, `localhost` is typically the container itself. The linked question has several paths to reach back to the host system (it is somewhat OS-dependent). – David Maze Feb 03 '23 at 14:30
  • Thanks @DavidMaze, for your answer. I didn't realise the "localhost" was the container itself. – laos Feb 07 '23 at 11:25

0 Answers0