Eu tenho uma imagem Postgres executando meu banco de dados e executo-a como um contêiner Docker e posso me conectar a ela a partir do psql, mas quando me conecto a ela a partir do meu servidor de aplicativos, recebo o seguinte erro:
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.
cpo-platform-server-cpo-platform-1 | at org.postgresql.core.v3.ConnectionFactoryImpl.openConnectionImpl(ConnectionFactoryImpl.java:342)
cpo-platform-server-cpo-platform-1 | at org.postgresql.core.ConnectionFactory.openConnection(ConnectionFactory.java:54)
cpo-platform-server-cpo-platform-1 | at org.postgresql.jdbc.PgConnection.<init>(PgConnection.java:263)
cpo-platform-server-cpo-platform-1 | at org.postgresql.Driver.makeConnection(Driver.java:443)
cpo-platform-server-cpo-platform-1 | at org.postgresql.Driver.connect(Driver.java:297)
cpo-platform-server-cpo-platform-1 | at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:677)
cpo-platform-server-cpo-platform-1 | at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
cpo-platform-server-cpo-platform-1 | at doobie.util.transactor$Transactor$FromDriverManagerUnapplied.$anonfun$apply$19(transactor.scala:378)
cpo-platform-server-cpo-platform-1 | at doobie.util.transactor$Transactor$FromDriverManagerUnapplied.$anonfun$create$2(transactor.scala:347)
cpo-platform-server-cpo-platform-1 | at blocking @ doobie.util.transactor$Transactor$FromDriverManagerUnapplied.$anonfun$create$1(transactor.scala:347)
cpo-platform-server-cpo-platform-1 | at fromAutoCloseable @ doobie.util.transactor$Transactor$FromDriverManagerUnapplied.$anonfun$create$1(transactor.scala:347)
cpo-platform-server-cpo-platform-1 | at fromAutoCloseable @ doobie.util.transactor$Transactor$FromDriverManagerUnapplied.$anonfun$create$1(transactor.scala:347)
cpo-platform-server-cpo-platform-1 | at use @ doobie.util.transactor$Transactor$$anon$4.apply(transactor.scala:164)
Há algo que devo observar ao conectar-me de um contêiner Docker onde meu servidor de aplicativos está sendo executado para outro contêiner Docker onde meu banco de dados está sendo executado? Eu uso o docker compose para iniciar os dois assim:
services:
my-app:
image: me/my-app-server:1.1-SNAPSHOT
ports:
- 127.0.0.1:9000:9000
environment:
configEnv: test
my-db:
image: my-db-postgres-test-container
ports:
- 127.0.0.1:5432:5432
Depois de iniciar, posso me conectar ao banco de dados usando o psql, mas a conexão por meio do meu servidor de aplicativos falha. As credenciais, servidor de banco de dados etc. estão todos configurados corretamente, mas ainda assim não se conectam.
Alguma ideia?
Quando dois contêineres são iniciados, as portas expostas do host não são expostas nos contêineres.
Use o nome do host do contêiner postgres,
my-db
no seu caso, em vez de localhost, para conectar-se a partir domy-app
.