Como resolver conflito de portas ao rodar múltiplos projetos Docker na mesma máquina

Como resolver conflito de portas ao rodar múltiplos projetos Docker na mesma máquina MySQL Stanislav Kondratiev

Se você trabalha com vários projetos em Docker ao mesmo tempo, é comum esbarrar em um erro conhecido: "port is already allocated". Isso acontece porque dois projetos diferentes tentam usar a mesma porta no seu computador (host), como a 80, 3306 ou 8080.

Neste guia você vai aprender a identificar o conflito e alterar as portas do docker-compose.yml para subir vários projetos ao mesmo tempo, sem parar nenhum deles.

1. Identifique quais portas já estão em uso

Antes de tudo, verifique quais containers já estão rodando e quais portas eles ocupam:

docker ps --format "table {{.Names}}\t{{.Ports}}"

Você também pode checar todas as portas abertas no sistema com:

ss -tln

2. Localize o arquivo docker-compose.yml do novo projeto

No arquivo docker-compose.yml do projeto que você quer subir, localize o bloco ports de cada serviço. Ele segue o formato:

ports:
  - "porta_do_computador:porta_do_container"

A porta da esquerda é a que fica exposta no seu computador (host) e pode gerar conflito. A porta da direita é interna do container e não precisa ser alterada.

3. Escolha uma porta livre

Troque apenas o número do lado esquerdo por uma porta que ainda não esteja em uso. Exemplo, alterando o serviço de banco de dados:

db:
  image: mysql:5.6.39
  ports:
    - "3307:3306"   # antes era 3306:3306

Faça o mesmo para os demais serviços (servidor web, painel de administração, storage, etc.), sempre escolhendo uma porta livre para cada um.

4. Suba o projeto novamente

docker compose up -d

Se não houver mais conflitos, todos os containers devem subir normalmente, mesmo com outro projeto já rodando.

5. Ajuste a forma de conexão

Como a porta externa mudou, qualquer ferramenta ou comando que você usava para acessar o serviço também precisa apontar para a nova porta. Exemplo de conexão com o banco de dados via terminal:

mysql -h 127.0.0.1 --port=3307 -u usuario -p nome_do_banco --ssl-mode=DISABLED

O mesmo vale para acessar o projeto pelo navegador: se o serviço web antes estava em http://localhost:80, agora deverá ser acessado pela nova porta definida, por exemplo http://localhost:8081.

Dica importante

As portas internas dos containers (lado direito do mapeamento) não precisam ser alteradas. Serviços de um mesmo docker-compose.yml continuam se comunicando entre si normalmente pela rede interna do Docker, independente da porta exposta no host.

Publicidade