📋 Introdução
Este guia mostra como criar uma segunda instância de um container usando um container existente como base, mas conectado a uma base de dados diferente.
Quando usar este método?
- ✅ Você já tem um container funcionando e quer criar outro para outro lugar
- ✅ Você quer usar a mesma imagem Docker, mas com configurações diferentes
- ✅ Você quer evitar criar uma nova stack completa
🔍 Passo 1: Localizar o Container Existente
- No Portainer, vá em Containers
- Encontre o container existente (ex:
meu-container) - Clique no nome do container para ver os detalhes
📋 Passo 2: Duplicar o Container
- No container existente, clique no botão Duplicate/Edit (ou Edit)
- Isso abrirá a tela de edição com todas as configurações do container atual
✏️ Passo 3: Alterar o Nome do Container
No campo Name, altere para um nome único, por exemplo:
meu-container-1meu-container-2meu-projeto-instancia-2
🔌 Passo 4: Alterar o Mapeamento de Porta
- Na seção Port mapping, localize o mapeamento existente (ex:
5001:5001) - Altere a porta do Host (primeiro número) para uma porta disponível
Exemplos de mapeamento:
5002:5001(porta 5002 no host, 5001 no container)5003:50016001:5001- Ou qualquer outra porta disponível no servidor
5001, mas a porta do host (primeiro número) DEVE ser diferente.
⚙️ Passo 5: Configurar Variáveis de Ambiente
- Role até a seção Advanced container settings
- Clique em Env (ou Environment variables)
- Você verá todas as variáveis de ambiente do container original
Variáveis que devem ser alteradas
| Variável | Descrição | Valor Original (Exemplo) | Novo Valor (Exemplo) |
|---|---|---|---|
DB_HOST |
Endereço do servidor de banco de dados | 192.168.1.10 |
192.168.1.20 |
DB_PORT |
Porta do banco de dados | 5432 |
5433 |
DB_PASSWORD |
Senha de acesso ao banco de dados | senha_db_123 |
nova_senha_db_456 |
ADMIN_USERNAME |
Nome de usuário do administrador | admin |
admin2 |
ADMIN_PASSWORD |
Senha do administrador | senha123 |
novaSenha456 |
DB_DATABASE |
Nome do banco de dados | meu_banco |
meu_banco_2 |
CIDADE_IBGE |
Código IBGE da cidade (se aplicável) | 3550308 |
3544004 |
ESTADO |
Sigla do estado (se aplicável) | SP |
RJ |
POPULATION |
População (se aplicável) | 12000000 |
6500000 |
SECRET_TOKEN |
Token secreto para segurança (JWT, etc) | abc123def456 |
xyz789ghi012 |
🚀 Passo 6: Criar o Novo Container
6.1: Configurar Reinicialização Automática
Antes de criar o container, configure para que ele reinicie automaticamente caso o Docker reinicie ou o servidor reinicie:
- Na seção Advanced container settings, procure por Restart policy
- Selecione Always ou Unless stopped
- Isso garantirá que o container inicie automaticamente após reinicializações
6.2: Deploy do Container
- Após configurar todas as variáveis e a política de reinicialização, role até o final da página
- Clique em Deploy the container
- Aguarde o container ser criado e iniciar
🔍 Passo 7: Verificar Logs
7.1: Acessar os Logs do Container
- No Portainer, vá em Containers
- Clique no container criado
- Vá na aba Logs
- Role para ver todas as mensagens desde o início
7.2: Logs de Sucesso - O que você DEVE ver
Quando o container está funcionando corretamente, você verá logs similares a estes:
✅ Application started ✅ Server listening on port 5001 ✅ Database connection established ✅ Service initialized successfully ✅ All services are running ╭───────────────────────────── Aplicação em execução ─────────────────────────────╮ │ A aplicação foi iniciada com sucesso e já pode ser acessada pelos │ │ endereços abaixo: │ │ HOST: │ │ http://localhost:5001 │ │ http://0.0.0.0:5001 │ │ http://172.19.0.3:5001 │ │ MANTENHA ESTA APLICAÇÃO EM EXECUÇÃO. │ ╰──────────────────────────────────────────────────────────────────────────────────╯
🌐 Passo 8: Configurar Nginx para o Novo Container
Após verificar que o container está funcionando, configure o Nginx para acessar o backend através de uma URL amigável.
8.1: Preparação
Informações necessárias:
- Porta do container:
5002(porta do host onde o novo container está rodando) - Domínio: Escolha um domínio para o seu projeto (ex:
meu-projeto.exemplo.com.br)
8.2: Opção 1 - Domínio Raiz com Subpaths (Recomendado)
Esta configuração permite acessar múltiplas instâncias através do mesmo domínio usando subpaths diferentes.
Exemplo de acesso:
https://meu-projeto.exemplo.com.br/instancia1/→ Container porta 5001https://meu-projeto.exemplo.com.br/instancia2/→ Container porta 5002https://meu-projeto.exemplo.com.br/instancia3/→ Container porta 5003
Criar/Editar arquivo de configuração do Nginx
sudo nano /etc/nginx/sites-available/meu-projeto.exemplo.com.br
Configuração completa do Nginx com múltiplas instâncias
# HTTP -> HTTPS
server {
listen 80;
server_name meu-projeto.exemplo.com.br;
return 301 https://$host$request_uri;
}
# HTTPS
server {
listen 443 ssl http2;
server_name meu-projeto.exemplo.com.br;
ssl_certificate /etc/letsencrypt/live/meu-projeto.exemplo.com.br/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/meu-projeto.exemplo.com.br/privkey.pem;
client_max_body_size 50m;
# Instância 1 (host 5001)
location = /instancia1 { return 301 /instancia1/; }
location ^~ /instancia1/ {
rewrite ^/instancia1(/.*)$ $1 break;
proxy_pass http://127.0.0.1:5001;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
# Instância 2 (host 5002)
location = /instancia2 { return 301 /instancia2/; }
location ^~ /instancia2/ {
rewrite ^/instancia2(/.*)$ $1 break;
proxy_pass http://127.0.0.1:5002;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
# Instância 3 (host 5003) - Adicione mais instâncias seguindo este padrão
location = /instancia3 { return 301 /instancia3/; }
location ^~ /instancia3/ {
rewrite ^/instancia3(/.*)$ $1 break;
proxy_pass http://127.0.0.1:5003;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_send_timeout 300;
}
# Raiz do domínio -> redirecionar para primeira instância (opcional)
location = / { return 301 /instancia1/; }
}
Vantagens desta configuração:
- ✅ Apenas um certificado SSL necessário
- ✅ Fácil de adicionar novas instâncias
- ✅ URLs organizadas e intuitivas
- ✅ Gerenciamento simplificado
8.3: Exemplo de Configuração Completa
| Container | Porta | URL de Acesso |
|---|---|---|
| Container 1 (Original) | 5001 |
https://meu-projeto.exemplo.com.br/instancia1/ |
| Container 2 (Novo) | 5002 |
https://meu-projeto.exemplo.com.br/instancia2/ |
| Container 3 (Futuro) | 5003 |
https://meu-projeto.exemplo.com.br/instancia3/ |
🔄 Passo 9: Atualizar o Serviço do Nginx
9.1: Habilitar o Site (se ainda não fez)
Se você criou um novo arquivo de configuração do Nginx, crie um link simbólico para habilitá-lo:
sudo ln -s /etc/nginx/sites-available/meu-projeto.exemplo.com.br /etc/nginx/sites-enabled/
9.2: Testar a Configuração do Nginx
Antes de recarregar, sempre teste a configuração para garantir que não há erros de sintaxe:
sudo nginx -t
Resposta esperada:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
9.3: Recarregar o Serviço do Nginx
Se o teste passou, recarregue o Nginx para aplicar as mudanças:
sudo systemctl reload nginx
💡 Dica
Use sudo systemctl reload nginx ao invés de sudo systemctl restart nginx. O comando reload aplica as mudanças sem desconectar conexões ativas, tornando a atualização transparente para os usuários.
🎉 Conclusão
Após seguir todos os passos:
- ✅ Container criado e funcionando
- ✅ Reinicialização automática configurada
- ✅ Logs verificados sem erros
- ✅ Backend acessível na porta configurada
- ✅ Nginx configurado e atualizado
- ✅ Acessível via domínio configurado
🎉 Seu novo container está pronto para uso!
Lembre-se:
- Cada instância deve ter um nome único de container
- Cada instância deve usar uma porta diferente
- Sempre verifique os logs após criar um novo container
- Adicionar novas instâncias é só copiar o bloco de
locationno Nginx