Este guia configura o smtp4dev para subir automaticamente sempre que o WSL iniciar/reiniciar, usando Docker Compose e systemd (o jeito mais “Linux raiz” e confiável).
✅ Resultado: abriu a distro / reiniciou o WSL → smtp4dev sobe sozinho.
- WSL2 (Ubuntu/Debian etc.)
- Docker disponível dentro do WSL:
- Opção A: Docker Desktop com integração WSL (recomendado)
- Opção B: Docker Engine instalado dentro do WSL
Verifique:
docker --version
docker compose versionCrie a pasta:
sudo mkdir -p /opt/smtp4devCrie o arquivo:
sudo nano /opt/smtp4dev/docker-compose.ymlCole:
version: "3"
services:
smtp4dev:
image: rnwood/smtp4dev:v3
restart: always
ports:
- "127.0.0.1:5000:80" # Web UI
- "127.0.0.1:2525:25" # SMTP
- "127.0.0.1:1143:143" # IMAP (opcional)
- "127.0.0.1:1110:110" # POP3 (opcional)
volumes:
- smtp4dev-data:/smtp4dev
environment:
- ServerOptions__Urls=http://*:80
- ServerOptions__HostName=smtp4dev
volumes:
smtp4dev-data:cd /opt/smtp4dev
docker compose up -d
docker psAcesse no host (Windows):
- Web UI: http://localhost:5000
SMTP:
- Host:
localhost - Porta:
2525
Por que 127.0.0.1 nas portas?
Pra não expor o smtp4dev pra rede inteira sem querer. Mantém tudo local.
Abra o arquivo:
sudo nano /etc/wsl.confAdicione:
[boot]
systemd=trueAgora no PowerShell do Windows:
wsl --shutdownAbra o WSL de novo e valide:
systemctl --version
systemctl is-system-runningCrie o unit file:
sudo nano /etc/systemd/system/smtp4dev.serviceCole:
[Unit]
Description=smtp4dev (Docker Compose)
After=network-online.target docker.service
Wants=network-online.target
Requires=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/smtp4dev
ExecStart=/usr/bin/docker compose up -d
ExecStop=/usr/bin/docker compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.targetAtive e rode agora:
sudo systemctl daemon-reload
sudo systemctl enable --now smtp4devCheque status:
sudo systemctl status smtp4dev --no-pagerLogs (se precisar):
journalctl -u smtp4dev -n 200 --no-pager- No PowerShell:
wsl --shutdown-
Abra a distro WSL novamente
-
Verifique:
sudo systemctl status smtp4dev --no-pager
docker ps | grep smtp4dev- SMTP Host:
localhost - SMTP Port:
2525 - Usuário/Senha: geralmente não precisa (depende da sua app)
Parar:
sudo systemctl stop smtp4devIniciar:
sudo systemctl start smtp4devReiniciar:
sudo systemctl restart smtp4devDesativar no boot:
sudo systemctl disable --now smtp4devSubir/derrubar manualmente via compose:
cd /opt/smtp4dev
docker compose up -d
docker compose down- Se você usa Docker Desktop, às vezes não existe
docker.servicedentro do WSL.- Solução: instale Docker Engine no WSL ou
- Ajuste o unit file para não depender do
docker.servicee apenas tentar subir o compose.
Se quiser o unit mais “tolerante”, troque o [Unit] por:
[Unit]
Description=smtp4dev (Docker Compose)
After=network-online.target
Wants=network-online.targetE mantenha o resto igual.
Cheque quem está usando:
sudo ss -ltnp | grep -E ':(5000|2525|1143|1110)\b'Troque as portas no docker-compose.yml e suba de novo:
cd /opt/smtp4dev
docker compose down
docker compose up -d- Confirme se o
/etc/wsl.confestá correto - Rode
wsl --shutdowne reabra o WSL - Garanta que você está no WSL2 (não WSL1)
Auto-start no WSL é top, mas lembra:
- O WSL não é um boot contínuo como servidor.
- Se você quiser smtp4dev “sempre em pé” mesmo sem abrir terminal, pode ser melhor rodar pelo Docker Desktop direto no Windows (e aí o container fica vivo independente do WSL).
/opt/smtp4dev/
docker-compose.yml
/etc/wsl.conf
/etc/systemd/system/smtp4dev.service
Pronto. Se você quiser, eu também monto uma variante “ultra-resiliente” do service (com retry, healthcheck e restart do unit via systemd), mas essa aqui já resolve 99% dos casos.