1
resposta

[Dúvida] Erro ao executar docker compose up: connect: connection refused

Ao executar o comando: docker compose up aparece o seguinte erro:

docker compose up 
[+] Running 1/1
 ✔ postgres Pulled                                                                                                                                                                                       1.3s 
[+] Running 2/2
 ✔ Container 3983-integracao-continua-app-1       Created                                                                                                                                                0.0s 
 ✔ Container 3983-integracao-continua-postgres-1  Recreated                                                                                                                                              0.3s 
Attaching to app-1, postgres-1
app-1       | 2025/07/03 14:35:44 Erro ao conectar com banco de dados
app-1       | 
app-1       | 2025/07/03 14:35:44 /app/database/db.go:24
app-1       | [error] failed to initialize database, got error failed to connect to `host=postgres user=root database=root`: dial error (dial tcp 172.18.0.2:5432: connect: connection refused)
app-1       | panic: Erro ao conectar com banco de dados
app-1       | 
app-1       | goroutine 1 [running]:
app-1       | log.Panic({0xc000593e70?, 0xc00006d1e0?, 0x0?})
app-1       |   /usr/local/go/src/log/log.go:432 +0x5a
app-1       | github.com/guilhermeonrails/api-go-gin/database.ConectaComBancoDeDados()
app-1       |   /app/database/db.go:26 +0x30c
app-1       | main.main()
app-1       |   /app/main.go:9 +0xf
app-1       | exit status 2
postgres-1  | 
postgres-1  | PostgreSQL Database directory appears to contain a database; Skipping initialization
postgres-1  | 
postgres-1  | 2025-07-03 14:35:44.517 UTC [1] LOG:  starting PostgreSQL 17.5 (Debian 17.5-1.pgdg120+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit
postgres-1  | 2025-07-03 14:35:44.517 UTC [1] LOG:  listening on IPv4 address "0.0.0.0", port 5432
postgres-1  | 2025-07-03 14:35:44.518 UTC [1] LOG:  listening on IPv6 address "::", port 5432
postgres-1  | 2025-07-03 14:35:44.532 UTC [1] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
app-1 exited with code 1
postgres-1  | 2025-07-03 14:35:44.611 UTC [29] LOG:  database system was shut down at 2025-07-03 14:35:37 UTC
postgres-1  | 2025-07-03 14:35:44.660 UTC [1] LOG:  database system is ready to accept connections
1 resposta

Esse erro acontece porque o container da aplicação (app-1) tenta se conectar ao banco de dados (postgres-1) antes que o banco esteja pronto para aceitar conexões.

dial tcp 172.18.0.2:5432: connect: connection refused

Ou seja, o Postgres ainda não estava aceitando conexões quando a aplicação tentou se conectar.

Adicione depends_on e healthcheck no docker-compose.yml

O depends_on sozinho não é suficiente — é preciso usar um healthcheck no serviço do Postgres para garantir que o banco esteja "saudável" antes da aplicação iniciar.

Exemplo ajustado:

services:
  postgres:
    image: postgres
    environment:
      POSTGRES_USER: root
      POSTGRES_PASSWORD: root
      POSTGRES_DB: root
    ports:
      - "5432:5432"
    healthcheck:
      test: ["CMD", "pg_isready", "-U", "root"]
      interval: 5s
      timeout: 5s
      retries: 5

  app:
    build: .
    depends_on:
      postgres:
        condition: service_healthy

Alternativa rápida para testar localmente

Execute o docker compose up duas vezes:

docker compose up --abort-on-container-exit

Depois:

docker compose up

Na segunda vez, o Postgres já estará de pé e a conexão deve funcionar. Mas essa abordagem não é ideal para produção.

  • O erro acontece porque o banco não está pronto no momento em que a aplicação tenta conectar.
  • Use healthcheck + depends_on com condition: service_healthy.
  • Isso garante que a aplicação só inicie quando o banco estiver aceitando conexões.