Container agendado que atualiza automaticamente bases de dados GeoIP2 da MaxMind. Executa em modo daemon com frequência configurável, ideal para servir dados geográficos em aplicações que usam módulos como ngx_http_geoip2_module do NGINX.
| Item | Valor |
|---|---|
| Imagem | lzocateli/geoipupdate:8.0.0 |
| Imagem base | ghcr.io/maxmind/geoipupdate:v8.0.0-amd64 |
| Plataformas | linux/amd64 |
| Usuário padrão | geoipupdate:geoipupdate (uid:gid 1000:1000) |
| Entry point | Herdado da imagem base (geoipupdate) |
| Comando padrão | Executa geoipupdate em modo daemon |
| Diretório de trabalho | / |
| Volume de dados | /usr/share/GeoIP |
| Código-fonte | https://github.com/lzocateli/containers/tree/main/geoipupdate |
| Documentação | https://github.com/lzocateli/containers/tree/main/geoipupdate |
GEOIPUPDATE_FREQUENCY.GEOIPUPDATE_VERBOSE.Baixe a imagem:
docker pull lzocateli/geoipupdate:8.0.0
Exemplo mínimo com arquivo .env:
cat > geoip2.env << 'EOF'
GEOIPUPDATE_ACCOUNT_ID=999999
GEOIPUPDATE_LICENSE_KEY=your_license_key_here
GEOIPUPDATE_EDITION_IDS=GeoLite2-City GeoLite2-Country GeoLite2-ASN
GEOIPUPDATE_FREQUENCY=48
GEOIPUPDATE_VERBOSE=1
EOF
docker run --name geoipupdate \
--detach \
--env-file geoip2.env \
--mount type=bind,src="$(pwd)/geoip-data",dst=/usr/share/GeoIP \
lzocateli/geoipupdate:8.0.0
Verificar logs:
docker logs geoipupdate
services:
geoipupdate:
image: lzocateli/geoipupdate:8.0.0
container_name: geoipupdate
restart: unless-stopped
env_file: geoip2.env
volumes:
- ./geoip-data:/usr/share/GeoIP
healthcheck:
test: [ "CMD", "test", "-f", "/usr/share/GeoIP/GeoLite2-City.mmdb" ]
interval: 3600s
timeout: 10s
retries: 3
start_period: 60s
Todas as variáveis são herdadas da imagem MaxMind oficial. As principais:
| Variável | Obrigatória | Secreta | Padrão | Descrição |
|---|---|---|---|---|
GEOIPUPDATE_ACCOUNT_ID | Sim | Não | Nenhum | ID da conta MaxMind. |
GEOIPUPDATE_LICENSE_KEY | Sim | Sim | Nenhum | Chave de licença MaxMind (segredo). |
GEOIPUPDATE_EDITION_IDS | Não | Não | GeoLite2-City | IDs das bases separadas por espaço. Opções comuns: GeoLite2-City, GeoLite2-Country, GeoLite2-ASN, GeoIP2-City (premium). |
GEOIPUPDATE_FREQUENCY | Não | Não | 0 | Frequência de atualização em horas (0 = uma vez na inicialização; ex: 48 = a cada 48h). |
GEOIPUPDATE_VERBOSE | Não | Não | 0 | Ativar logging verboso (1 = ativado). |
HTTP_PROXY | Não | Não | Nenhum | Proxy HTTP se necessário (ex: http://proxy.example.com:80). |
NO_PROXY | Não | Não | Nenhum | Hosts que contornam proxy (ex: localhost,127.0.0.1). |
A imagem não expõe portas HTTP/TCP. Comunica apenas com servers da MaxMind via HTTPS para download.
| Caminho no contêiner | Modo | Conteúdo | Backup necessário |
|---|---|---|---|
/usr/share/GeoIP | rw | Bases de dados .mmdb (GeoIP2, GeoLite2) | Sim |
As bases são baixadas no primeiro start e reutilizadas em atualizações subsequentes. Persistência é essencial para evitar redownloads desnecessários.
Propriedade esperada:
geoipupdate:geoipupdate (uid:gid 1000:1000)rwx (diretório), rw- (arquivos .mmdb)Bind mount recomendado no host:
mkdir -p /userapps/configs/geoip2/data
chmod 755 /userapps/configs/geoip2/data
A licença MaxMind NUNCA deve ser armazenada em variáveis de ambiente gravadas em logs. Use:
--secret e montadas em /run/secrets/..env com permissões 600, não versionado.Secret object lido como envFrom.env_file ou direto da ferramenta de deploy.Exemplo seguro com .env.example:
# .env.example (versionado, sem segredo)
GEOIPUPDATE_ACCOUNT_ID=MUDE_PARA_SEU_ID
GEOIPUPDATE_LICENSE_KEY=MUDE_PARA_SUA_CHAVE
GEOIPUPDATE_EDITION_IDS=GeoLite2-City GeoLite2-Country
GEOIPUPDATE_FREQUENCY=48
GEOIPUPDATE_VERBOSE=1
# .env (ignore file, local apenas, com segredos)
GEOIPUPDATE_ACCOUNT_ID=999999
GEOIPUPDATE_LICENSE_KEY=abc123def456...
GEOIPUPDATE_EDITION_IDS.GEOIPUPDATE_FREQUENCY > 0, aguarda N horas e repete.GEOIPUPDATE_FREQUENCY = 0, executa e encerra após primeiro download.Recomenda-se usar GEOIPUPDATE_FREQUENCY=24 ou 48 para manter bases atualizadas em produção.
geoipupdate:geoipupdate (uid:gid 1000:1000).ghcr.io/maxmind/geoipupdate); audite verificações de vulnerabilidade regularmente.Recomendação: Configure o host ou orquestrador para rotar secrets periodicamente (ex: a cada 90 dias).
docker build \
--pull \
--tag lzocateli/geoipupdate:8.0.0 \
geoipupdate
Para múltiplas plataformas:
docker buildx build \
--platform linux/amd64,linux/arm64 \
--tag lzocateli/geoipupdate:8.0.0 \
geoipupdate
| Tag | Mutabilidade | Compatibilidade | Uso recomendado |
|---|---|---|---|
8.0.0 | Imutável | MaxMind geoipupdate v8.0.0 | Produção estável |
latest | Móvel | Versão mais recente | Dev/testes apenas |
Política de atualização: A cada nova versão estável do geoipupdate, cria-se uma tag imutável. A tag latest segue o upstream.
Antes da publicação:
# Inspecionar Dockerfile
docker buildx build --dry-run geoipupdate
# Build local sem cache
docker build --no-cache -t test-geoip geoipupdate
# Smoke test: verificar se bases foram baixadas
docker run --rm \
--env-file geoip2.env \
--mount type=bind,src="$(pwd)/test-data",dst=/usr/share/GeoIP \
test-geoip
ls test-data/ # Deve conter *.mmdb
# Inspecionar imagem
docker inspect test-geoip
# Scan de vulnerabilidades
trivy image test-geoip
Use GitHub Actions > Publicar imagem de container > Run workflow e informe:
context_path: geoipupdateimage_name: geoipupdateimage_tag: 8.0.0dockerfile: Dockerfileplatforms: linux/amd64,linux/arm64 (ou apenas linux/amd64 se ARM não testada)O workflow:
lzocateli/geoipupdate:8.0.0.# Backup de bases (recomendado antes de deletar container)
tar -czf geoip-backup-$(date +%Y%m%d).tar.gz -C /userapps/configs/geoip2 data/
# Restore de backup
tar -xzf geoip-backup-20250814.tar.gz -C /userapps/configs/geoip2
docker restart geoipupdate
# Parar e remover container antigo
docker stop geoipupdate && docker rm geoipupdate
# Pull nova versão (ex: 8.1.0)
docker pull lzocateli/geoipupdate:8.1.0
# Restart com mesma config e volume
docker run -d \
--name geoipupdate \
--env-file geoip2.env \
--mount type=bind,src=/userapps/configs/geoip2/data,dst=/usr/share/GeoIP \
lzocateli/geoipupdate:8.1.0
# Logs em tempo real
docker logs -f geoipupdate
# Últimas N linhas
docker logs --tail 50 geoipupdate
# Com timestamp
docker logs -t geoipupdate
Recomendação para Kubernetes:
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 512Mi
| Sintoma | Causa provável | Verificação | Correção |
|---|---|---|---|
| "Invalid license key" | Credenciais MaxMind inválidas ou expiradas | docker logs geoipupdate | Verificar GEOIPUPDATE_ACCOUNT_ID e GEOIPUPDATE_LICENSE_KEY |
| Bases não baixadas | Permissões no volume | ls -la /userapps/configs/geoip2/data/ | Rodar chmod 755 /userapps/configs/geoip2/data no host |
| Conexão recusada (proxy) | Proxy obrigatório no ambiente | docker logs geoipupdate | Configurar HTTP_PROXY e NO_PROXY |
| Container sai imediatamente (FREQUENCY=0) | Comportamento esperado com freq 0 | Sem ação | Usar --restart=on-failure ou FREQUENCY > 0 |
| Falha de atualização periódica | Perda de conectividade ou mudança de credenciais | docker logs -f geoipupdate monitorado durante janela agendada | Validar conectividade com MaxMind; revisar credenciais |
SIGHUP se suportado.maxmind.com; edições premium exigem licença paga.| Componente | Versão | Licença | Fonte |
|---|---|---|---|
| Conteúdo original deste repositório | Atual | MIT | https://github.com/lzocateli/containers |
| geoipupdate (imagem base MaxMind) | v8.0.0 | Propriedade MaxMind | https://github.com/maxmind/geoipupdate |
| Bases de dados GeoIP2/GeoLite2 | Atualizado | Propriedade MaxMind | https://www.maxmind.com/ |
O badge MIT descreve somente o conteúdo original deste repositório. A imagem inclui componentes de terceiros sob licenças MaxMind que permanecem sujeitos aos termos e avisos de suas fontes. Consulte a política de licenciamento, preserve as atribuições upstream e respeite os termos de uso das bases de dados MaxMind.
Content type
Image
Digest
sha256:aaec60087…
Size
9.7 MB
Last updated
about 2 months ago
docker pull lzocateli/geoipupdate:8.0.0