<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Aureamar Jose Garcia Rocha</title>
    <description>The latest articles on Forem by Aureamar Jose Garcia Rocha (@aureamar_jose).</description>
    <link>https://forem.com/aureamar_jose</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3336956%2F5aeeeb68-ec44-48d5-8611-556170b21f89.png</url>
      <title>Forem: Aureamar Jose Garcia Rocha</title>
      <link>https://forem.com/aureamar_jose</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/aureamar_jose"/>
    <language>en</language>
    <item>
      <title>Tornando as portas do DevContainer disponíveis localmente com forwardPorts</title>
      <dc:creator>Aureamar Jose Garcia Rocha</dc:creator>
      <pubDate>Thu, 10 Jul 2025 03:04:53 +0000</pubDate>
      <link>https://forem.com/videosdeti/tornando-as-portas-do-devcontainer-disponiveis-localmente-com-forwardports-453f</link>
      <guid>https://forem.com/videosdeti/tornando-as-portas-do-devcontainer-disponiveis-localmente-com-forwardports-453f</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introdução&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;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 &lt;code&gt;"forwardPorts"&lt;/code&gt; no arquivo &lt;code&gt;devcontainer.json&lt;/code&gt;, que permite tornar portas específicas acessíveis fora do contêiner de forma simples e eficaz.&lt;/p&gt;

&lt;p&gt;Os passos a seguir mostram como fiz essa configuração para a fim de usar o DBeaver em minha máquina local.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Primeiro passo&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A configuração é bem simples: basta adicionar a propriedade &lt;code&gt;"forwardPorts"&lt;/code&gt; ao arquivo &lt;code&gt;devcontainer.json&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# .devcontainer/devcontainer.json
{
        "name": "Ruby on Rails &amp;amp; Postgres",
    "dockerComposeFile": "docker-compose.yml",
    "service": "app",
    "workspaceFolder": "/workspaces/task_control/rails_app",
    "forwardPorts": [
        5435
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Neste exemplo, utilizei a porta &lt;code&gt;5435&lt;/code&gt; em vez da &lt;code&gt;5432&lt;/code&gt;, pois a porta &lt;code&gt;5432&lt;/code&gt; 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.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Segundo passo&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Mapeando as portas com Docker Compose&lt;/strong&gt;&lt;/p&gt;

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

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;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
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com essa configuração, sempre que você acessar &lt;code&gt;127.0.0.1:5435&lt;/code&gt; no seu host, estará se comunicando com o PostgreSQL rodando na porta &lt;code&gt;5432&lt;/code&gt; 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).&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Terceiro passo&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Quarto passo&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Acessando o banco de dados com o DBeaver&lt;/strong&gt;&lt;br&gt;
Para se conectar ao banco de dados utilizando o DBeaver, siga o passos abaixo:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Abra o DBeaver&lt;/li&gt;
&lt;li&gt;No meu superior, vá em &lt;strong&gt;Database&lt;/strong&gt; -&amp;gt; &lt;strong&gt;New Database Connection&lt;/strong&gt; &lt;/li&gt;
&lt;li&gt;Selecione a opção &lt;strong&gt;PostgreSQL&lt;/strong&gt; e clicar em &lt;strong&gt;Next&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa316n3mgw04fdyrzpfue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa316n3mgw04fdyrzpfue.png" alt=" " width="800" height="750"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Agora, basta preencher os campos de conexão com as informações configuradas no contêiner: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Host:&lt;/strong&gt; &lt;code&gt;127.0.0.1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port:&lt;/strong&gt; &lt;code&gt;5435&lt;/code&gt; (&lt;em&gt;a porta mapeada no &lt;code&gt;docker-compose.yml&lt;/code&gt;&lt;/em&gt;)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database:&lt;/strong&gt; &lt;code&gt;postgres&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Username:&lt;/strong&gt; &lt;code&gt;postgres&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password:&lt;/strong&gt; &lt;code&gt;******&lt;/code&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1xclzien421sxjwgk1j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp1xclzien421sxjwgk1j.png" alt=" " width="585" height="546"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwazgjeb38yvdb35asvpn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwazgjeb38yvdb35asvpn.png" alt=" " width="584" height="501"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrol0ps63egnfyn6gyd2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrol0ps63egnfyn6gyd2.png" alt=" " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Conclusão&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Utilizar o &lt;code&gt;forwardPorts&lt;/code&gt; em conjunto com o mapeamento de portas no &lt;code&gt;docker-compose.yml&lt;/code&gt; é 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.&lt;/p&gt;

</description>
      <category>container</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
