Tornando as portas do DevContainer disponíveis localmente com forwardPorts

tornando-as-portas-do-devcontainer-disponiveis-localmente-com-forwardports

Introdução

Durante o desenvolvimento de um projeto utilizando DevContainer, surgiu a necessidade de acessar o banco de dados PostgreSQL que estava rodando dentro do contêiner, diretamente do meu sistema local (host). Foi nesse contexto que descobri o uso da propriedade "forwardPorts" no arquivo devcontainer.json, que permite tornar portas específicas acessíveis fora do contêiner de forma simples e eficaz.

  • Primeiro passo

A configuração é bem simples: basta adicionar a propriedade "forwardPorts" ao arquivo devcontainer.json

# .devcontainer/devcontainer.json
{
        "name": "Ruby on Rails & Postgres",
    "dockerComposeFile": "docker-compose.yml",
    "service": "app",
    "workspaceFolder": "https://dev.to/workspaces/task_control/rails_app",
    "forwardPorts": [
        5435
    ]
}

Neste exemplo, utilizei a porta 5435 em vez da 5432, pois a porta 5432 já está sendo usada pelo PostgreSQL instalado na minha máquina. Essa mudança evita conflitos entre os serviços locais e o banco de dados que está rodando dentro do container.

  • Segundo passo

Mapeando as portas com Docker Compose

Agora precisamos mapear a porta 5432 (porta padrão do PostgreSQL dentro do contêiner) para a porta 5435 no host. Para isso, vamos configurar o arquivo docker-compose.yml da seguinte forma:

db:
    image: postgres:latest
    restart: unless-stopped
    volumes:
      - postgres-data:/var/lib/postgresql/data
      - ./create-db-user.sql:/docker-entrypoint-initdb.d/create-db- 
         user.sql
    environment:
      POSTGRES_USER: postgres
      POSTGRES_DB: postgres
      POSTGRES_PASSWORD: postgres
    ports:
      - 5435:5432

Com essa configuração, sempre que você acessar 127.0.0.1:5435 no seu host, estará se comunicando com o PostgreSQL rodando na porta 5432 dentro do container. Isso garante que não haja conflito com o PostgreSQL local (caso você já tenha um instalado e ativo na porta padrão 5432).

  • Terceiro passo

Depois de ajustar as configurações no devcontainer.json e no docker-compose.yml, basta reabrir o DevContainer e fazer o build novamente para aplicar as alterações.

  • Quarto passo

Acessando o banco de dados com o DBeaver
Para se conectar ao banco de dados utilizando o DBeaver, siga o passos abaixo:

  1. Abra o DBeaver
  2. No meu superior, vá em Database -> New Database Connection
  3. Selecione a opção PostgreSQL e clicar em Next.

Agora, basta preencher os campos de conexão com as informações configuradas no contêiner:

  • Host: 127.0.0.1
  • Port: 5435 (a porta mapeada no docker-compose.yml)
  • Database: postgres
  • Username: postgres
  • Password: ******

Agora é só testar a conexão. Se tudo estiver configurado corretamente, uma caixa de diálogo será exibida confirmando que a conexão foi estabelecida com sucesso.

Após isso, você poderá visualizar as tabelas do banco de dados diretamente no DBeaver, facilitando a navegação, consultas e até alterações na estrutura dos dados.

Conclusão

Utilizar o forwardPorts em conjunto com o mapeamento de portas no docker-compose.yml é uma solução simples e eficaz para expor serviços do DevContainer ao seu ambiente local. Essa abordagem facilita o desenvolvimento, permitindo o uso de ferramentas externas, testes e conexões diretas com o banco de dados sem complicações.

Total
0
Shares
Leave a Reply

Your email address will not be published. Required fields are marked *

Previous Post
faculdade-ou-certificacao?-o-melhor-caminho-na-area-de-ti

Faculdade ou Certificação? O Melhor Caminho na Área de TI

Next Post
what-the-terraform-providers-command-tells-you

What the terraform providers command tells you

Related Posts