English · Español · Polski · 简体中文 · Deutsch · Français · Português (Brasil)

drydock

drydock

**Observador de atualização de imagem de contêiner, 23 registros, 21 provedores de notificação e ação.**

Release Multi-arch License
CI OpenSSF Scorecard OpenSSF Best Practices Maintainability Mutation testing Coverage
Docker Hub pulls Stars Mentioned in Awesome Docker Crowdin localization Sponsor


> [!WARNING] > **v1.8.0-rc.1 é uma versão de teste opcional.** Pare o Drydock e faça uma cópia de todo o diretório de dados antes de testar. A primeira inicialização importa os dados JSON para SQLite. Voltar a uma versão anterior exige restaurar a cópia prévia; alterações feitas apenas no SQLite não são transferidas de volta. Consulte [migração e descontinuações](DEPRECATIONS.md). > [!WARNING] > **Atualizando de uma versão mais antiga? Leia as notas de atualização primeiro.** Três correções de reforço de segurança enviadas pela primeira vez em **1.4.6** e executadas em toda a linha **1.5**, portanto, qualquer pessoa que atualizar de uma versão anterior a 1.4.6 será afetada, independentemente da versão em que chegar (1.4.6, qualquer 1.5.x ou posterior). Eles não são obsoletos e não têm período de carência: o OIDC agora requer `authorization_endpoint` nos metadados de descoberta do seu provedor, chaves de limitação de taxa não autenticadas no endereço de peer TCP (depósito compartilhado atrás de um proxy reverso) e URLs de proxy de acionamento HTTP devem usar `http(s)://`. Consulte **[UPGRADE-NOTES.md](UPGRADE-NOTES.md)** antes de atualizar. > [!WARNING] > **Atualizando para 1.6.0-rc.3 ou posterior?** Mais reforços de segurança entram em vigor sem período de carência. Uma instância sem autenticação configurada, ou com autenticação anônima ativada mas não confirmada, agora falha de forma fechada após a atualização, assim como uma instalação nova: o contêiner continua em execução, solicitações protegidas da API retornam `401`, as rotas públicas de descoberta e status de autenticação permanecem disponíveis e `/health` retorna `503`. A interface SPA pode carregar, mas não lê dados protegidos. Defina `DD_ANONYMOUS_AUTH_CONFIRM=true` ou configure `DD_AUTH_BASIC_*`/OIDC antes de atualizar. O cookie da sessão muda de `connect.sid` para `drydock.sid`, desconectando todos os usuários uma vez. Gatilhos HTTP, o webhook Hass e buscas de ícones de registro agora usam DNS protegido, bloqueiam destinos de metadados de nuvem e link-local e nunca seguem redirecionamentos. Use `allowmetadata=true` somente no gatilho `DD_NOTIFICATION_HTTP_*` específico que realmente precisar. Consulte **[DEPRECATIONS.md](DEPRECATIONS.md#enforced-security-changes-no-deprecation-window)** para a orientação completa.

Conteúdo

- [Documentação](#documentation) - [Início rápido](#quick-start) - [Capturas de tela e demonstração ao vivo](#screenshots) - [Por que Drydock](#why-drydock) - [Recursos](#features) - [Integrações suportadas](#supported-integrations) - [Comparação de recursos](#feature-comparison) - [Migração](#migration) - [Roteiro](#roadmap) - [História da estrela](#star-history) - [Construído com](#built-with) - [Comunidade e suporte](#community-support) - [Ecossistema CodesWhat](#codeswhat-ecosystem)

Documentação

| Recurso | Ligação | | ---------------------- | --------------------------------------------------------------------------------------------------------------------------- | | Site | [getdrydock.com](https://getdrydock.com/) | | Demonstração ao vivo | [demo.getdrydock.com](https://demo.getdrydock.com) | | Documentos | [getdrydock.com/docs](https://getdrydock.com/docs) | | Configuração | [Configuração](https://getdrydock.com/docs/configuration) | | Início rápido | [Início rápido](https://getdrydock.com/docs/quickstart) | | Registro de alterações | [`CHANGELOG.md`](CHANGELOG.md) | | Deprecations | [`DEPRECATIONS.md`](DEPRECATIONS.md) | | Roadmap | Consulte a seção [Roteiro](#roadmap) abaixo | | Contribuindo | [`CONTRIBUTING.md`](CONTRIBUTING.md) | | Código de Conduta | [`CODE_OF_CONDUCT.md`](CODE_OF_CONDUCT.md) | | Governança | [`GOVERNANCE.md`](GOVERNANCE.md) | | Garantia de Segurança | [`SECURITY-ASSURANCE.md`](SECURITY-ASSURANCE.md) | | Política de Segurança | [`SECURITY.md`](SECURITY.md) | | Problemas | [Problemas do GitHub](https://github.com/CodesWhat/drydock/issues) | | Discussões | [Discussões no GitHub](https://github.com/CodesWhat/drydock/discussions) - solicitações de recursos e ideias são bem-vindas |

Início rápido

**Recomendado: use um proxy de soquete** para restringir quais endpoints da API Docker que Drydock podem acessar. Isso evita dar ao contêiner acesso total ao soquete Docker. > **Nota:** O Compose trata `$` como sintaxe de interpolação de variáveis, então um hash argon2id colado com um único `$` chega ao Drydock corrompido. Duplique cada `$` para `$$` ao colar o hash real, por exemplo `$$argon2id$$v=19$$m=65536,t=3,p=4$$salt$$hash`. ```yaml services: drydock: image: codeswhat/drydock depends_on: socket-proxy: condition: service_healthy volumes: - drydock-store:/store environment: - DD_WATCHER_LOCAL_HOST=socket-proxy - DD_WATCHER_LOCAL_PORT=2375 - DD_AUTH_BASIC_ADMIN_USER=admin - "DD_AUTH_BASIC_ADMIN_HASH=" ports: - 3000:3000 socket-proxy: image: tecnativa/docker-socket-proxy volumes: - /var/run/docker.sock:/var/run/docker.sock environment: - CONTAINERS=1 - IMAGES=1 - EVENTS=1 - SERVICES=1 - INFO=1 # Required for daemon identity detection (notification prefixes) # Add POST=1 and NETWORKS=1 for container actions and auto-updates healthcheck: test: wget --spider http://localhost:2375/version || exit 1 interval: 5s timeout: 3s retries: 3 start_period: 5s restart: unless-stopped volumes: drydock-store: ```
Alternativa: sockguard proxy de soquete [sockguard](https://github.com/CodesWhat/sockguard) é um filtro de soquete Docker de negação padrão do mesmo ecossistema CodesWhat, com uma predefinição criada para drydock: > **Nota:** O Compose trata `$` como sintaxe de interpolação de variáveis, então um hash argon2id colado com um único `$` chega ao Drydock corrompido. Duplique cada `$` para `$$` ao colar o hash real, por exemplo `$$argon2id$$v=19$$m=65536,t=3,p=4$$salt$$hash`. ```yaml services: drydock: image: codeswhat/drydock depends_on: sockguard: condition: service_healthy volumes: - drydock-store:/store environment: - DD_WATCHER_LOCAL_HOST=sockguard - DD_WATCHER_LOCAL_PORT=2375 - DD_AUTH_BASIC_ADMIN_USER=admin - "DD_AUTH_BASIC_ADMIN_HASH=" ports: - 3000:3000 sockguard: image: codeswhat/sockguard volumes: - /var/run/docker.sock:/var/run/docker.sock - ./sockguard.yaml:/etc/sockguard/config.yaml:ro environment: - SOCKGUARD_CONFIG_FILE=/etc/sockguard/config.yaml healthcheck: test: wget --spider http://localhost:2375/version || exit 1 interval: 5s timeout: 3s retries: 3 start_period: 5s restart: unless-stopped volumes: drydock-store: ``` Consulte a [predefinição sockguard de `app/configs/portwing.yaml`](https://github.com/CodesWhat/sockguard/blob/dev/v1.5/app/configs/portwing.yaml) para um `sockguard.yaml` inicial (a mesma predefinição portwing vem em seus próprios exemplos).
Alternativa: início rápido com montagem direta em soquete ```bash docker run -d \ --name drydock \ -p 3000:3000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v drydock-store:/store \ -e DD_AUTH_BASIC_ADMIN_USER=admin \ -e 'DD_AUTH_BASIC_ADMIN_HASH=' \ codeswhat/drydock:latest ``` > **Aviso:** O acesso direto ao soquete concede ao contêiner controle total sobre o daemon do Docker. Use a configuração do proxy de soquete acima para implantações de produção. Consulte o [Guia de segurança do soquete Docker](https://getdrydock.com/docs/configuration/watchers#docker-socket-security) para todas as opções, incluindo TLS remoto e Docker sem raiz. > > Use aspas simples ao redor do valor do hash, como mostrado. Aspas duplas ainda permitem que o shell expanda `$` antes que o docker o veja, corrompendo um hash argon2id real.
> Gere um hash de senha (`argon2` CLI — instale através do seu gerenciador de pacotes): > > ```bash > echo -n "yourpassword" | argon2 $(openssl rand -base64 32) -id -m 16 -t 3 -p 4 -l 64 -e > ``` > > Ou com Node.js 24.7+ (sem necessidade de pacotes extras): > > ```bash > node -e 'const c=require("node:crypto");const s=c.randomBytes(32);const h=c.argon2Sync("argon2id",{message:process.argv[1],nonce:s,memory:65536,passes:3,parallelism:4,tagLength:64});console.log("argon2id$65536$3$4$"+s.toString("base64")+"$"+h.toString("base64"));' "yourpassword" > ``` > > Drydock v1.6 aceita apenas hashes de autenticação básicos argon2id. `{SHA}` legado, `$apr1$`/`$1$`, `crypt` e hashes de texto simples são rejeitados; regenere-os antes de atualizar. > A autenticação é **exigida por padrão**. Consulte o [auth docs](https://getdrydock.com/docs/configuration/authentications) para OIDC, acesso anônimo e outras opções. > O acesso anônimo deve ser confirmado explicitamente com `DD_ANONYMOUS_AUTH_CONFIRM=true` em instalações novas e atualizadas. Sem essa confirmação, uma instância sem autenticação configurada ou com autenticação anônima não confirmada inicia fechada: solicitações protegidas da API retornam `401`, as rotas públicas de descoberta e status de autenticação continuam disponíveis e `/health` retorna `503`. A imagem inclui binários `trivy` e `cosign` para verificação de vulnerabilidade local e verificação de imagem. Consulte o [Guia de início rápido](https://getdrydock.com/docs/quickstart) para Docker Compose, segurança de soquete, proxy reverso e registros alternativos. As mudanças de cada versão estão no [`CHANGELOG.md`](CHANGELOG.md) e na página de [GitHub Releases](https://github.com/CodesWhat/drydock/releases).

Capturas de tela e demonstração ao vivo

Drydock detecting and applying a container update

Identifique uma atualização, veja exatamente o que muda e aplique-a. Backup, verificação de integridade e reversão tratados.

Luz Escuro
Dashboard Light Dashboard Dark
**Por que olhar as capturas de tela quando você mesmo pode experimentar?** Try the Live Demo Totalmente interativo – UI real, dados simulados, sem necessidade de instalação. Funciona inteiramente no navegador.

Por que Drydock

As imagens dos contêineres ficam desatualizadas silenciosamente. Uma imagem base corrige um CVE, um aplicativo corta uma versão, uma tag se move. A menos que você observe cada registro manualmente, seus contêineres em execução ficarão para trás até que algo quebre ou seja explorado. A maioria das ferramentas força uma compensação. Os atualizadores automáticos (Watchtower, Ouroboros) puxam e reiniciam com pouca visibilidade ou controle e agora não recebem manutenção. Os painéis (Portainer) gerenciam contêineres, mas não foram criados para inteligência de atualização. Drydock é **monitorar primeiro**: ele monitora 23 registros e informa exatamente o que mudou (principal, secundário, patch ou resumo) antes que algo aconteça, e então age apenas quando você permite. E vai além de qualquer um deles. A verificação de vulnerabilidades Trivy/Grype bloqueia atualizações inseguras, o Cosign verifica assinaturas, os backups de imagem pré-atualização são revertidos automaticamente em caso de falha na verificação de integridade, os agentes distribuídos cobrem hosts remotos e 21 integrações de notificação e ação fecham o ciclo. O ciclo de vida completo da atualização, com uma UI web e uma API REST.

Recursos

| | Recurso | Descrição | | --- | ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 🔭 | **Detecção que prioriza o monitoramento** | Observa cada contêiner em execução e classifica cada atualização disponível como principal, secundária, patch ou resumo antes que algo aconteça. Nada muda até que você diga. | | 📦 | **23 provedores de registro** | Docker Hub, GHCR, ECR, ACR, GCR, GAR, GitLab, Quay, Harbor, Artifactory, Nexus e mais 12. Público e privado, em nuvem e auto-hospedado, com TLS e autenticação por registro. | | 🔔 | **21 gatilhos** | 17 canais de notificação (Slack, Discord, Telegram, Teams, SMTP, MQTT, ntfy e mais) além de Docker, Docker Compose, Portainer e ações de comando, com modelos por evento/provedor, visualização ao vivo, filtragem de limite e modo em lote. | | 🥊 | **Update Bouncer** | A verificação de vulnerabilidades Trivy/Grype bloqueia atualizações inseguras antes de serem implantadas, com verificação da assinatura Cosign e geração de SBOM (CycloneDX e SPDX). | | ↩️ | **Backup de imagem e reversão automática** | Instantâneos de imagem pré-atualizados com retenção configurável, reversão automática em caso de falha na verificação de integridade e reversão manual com um clique na interface do usuário. | | 🪝 | **Ganchos de ciclo de vida** | Comandos shell pré e pós-atualização por meio de rótulos de contêiner, com tempos limite por gancho e controle de aborto em caso de falha. | | 🗂️ | **Atualizações Docker Compose** | Extraia e recrie serviços do Compose por meio da API Docker Engine com patch de imagem com preservação de YAML. | | 🎛️ | **Política por contêiner** | As regras de tag Regex e o roteamento de gatilho usam rótulos `dd.*`; portas de maturidade, pular/adiar/fixar e janelas de manutenção são armazenadas via UI/API ou configuração do inspetor. | | 🛰️ | **Agentes distribuídos** | Monitore hosts Docker remotos por SSE. Agentes Portwing 0.9.0+ usam Standard HTTP de entrada ou transporte WebSocket Edge de saída; o Drydock 1.6.0-rc.11+ executa no controlador verificações nativas de registro e atualizações Docker individuais ou em lote por qualquer caminho autenticado. O Edge também transporta logs contínuos sem porta de entrada; `DD_EXPERIMENTAL_PORTWING=false` continua sendo a desativação de emergência. | | 🖥️ | **Painel Web** | UI Vue 3 com uma grade de widget personalizável de dependência zero, visualizações responsivas de tabela/cartão, atualizações SSE ao vivo, controles de sino de notificação e detalhes, registros e estatísticas por contêiner. | | 🔗 | **API REST e webhooks** | Endpoints autenticados por token para monitoramento de CI/CD e gatilhos de atualização, além de ingestão de webhook de registro assinado para eventos push. | | 🔐 | **Autenticação OIDC** | Proteja o painel com OpenID Connect (Authelia, Auth0, Authentik). Por padrão, qualquer falha no fluxo de autenticação nega o acesso (fail-closed). | | 📈 | **Métricas Prometheus** | Endpoint `/metrics` integrado com bypass de autenticação opcional para pilhas de monitoramento Prometheus e Grafana. | | 🌍 | **17 localidades da IU** | Sistema de tradução totalmente conectado com inglês completo e 16 localidades mantidas pela comunidade sincronizadas por meio de Crowdin, alternáveis ​​no Config. | | 🔒 | **ReDoS-Imune Regex** | Cada padrão de tag fornecido pelo usuário é compilado via re2js (uma porta RE2 JS pura) para correspondência de tempo linear que não pode ser interrompida por um padrão de retrocesso catastrófico. |

Integrações suportadas

### Registros (23) Docker Hub · GHCR · ECR · ACR · GCR · GAR · GitLab · Quay · LSCR · Harbor · Artifactory · Nexus · Gitea · Forgejo · Codeberg · MAU · TrueForge · Personalizado · DOCR · DHI · IBM Cloud · Oracle Cloud · Alibaba Cloud ### Ações (4) Docker · Docker Compose · Portainer · Command ### Notificações (17) Apprise · Discord · Google Chat · Gotify · HTTP · IFTTT · Kafka · Matrix · Mattermost · MQTT · MS Teams · NTFY · Pushover · Rocket.Chat · Slack · SMTP · Telegram ### Autenticação Anônimo (opt-in via `DD_ANONYMOUS_AUTH_CONFIRM=true`) · Básico (nome de usuário + hash de senha) · OIDC (Authelia, Auth0, Authentik). Por padrão, qualquer falha no fluxo de autenticação nega o acesso (fail-closed). ### Update Bouncer A verificação de vulnerabilidades com tecnologia Trivy ou Grype bloqueia atualizações inseguras antes de serem implantadas. Inclui verificação da assinatura Cosign e geração de SBOM (CycloneDX e SPDX).

Comparação de recursos

Como o drydock se compara a outras ferramentas de atualização de contêiner? > ✅ = suportado   ❌ = não suportado   ⚠️ = parcial/limitado   ? = não confirmado   † = arquivado, não é mais mantido

Gerenciadores de atualização

Recurso drydock WUD Diun Watchtower †
Mantido ativamente✅✅✅❌
Interface web / painel✅✅❌❌
Atualização automática de contêineres✅✅❌✅
Atualizações do Docker Compose✅✅❌⚠️
Atualizações compatíveis com SemVer✅✅⚠️❌
Monitoramento de digest✅✅✅✅
Filtragem por limite de atualização (major/minor/patch/digest)✅✅❌❌
Ordem de atualização com base em dependências⚠️❌❌❌
Fila de aprovações pendentes✅❌❌❌
Backup e reversão de imagens✅❌❌❌
Hooks de ciclo de vida (pré/pós)✅❌❌✅
Verificação de vulnerabilidades✅❌❌❌
Log de auditoria✅❌❌❌
RBAC / funções multiusuário❌❌❌❌
Autenticação OIDC / SSO✅✅❌❌
Canais de gatilho / notificação211717~20
MQTT / Home Assistant✅✅⚠️❌
Provedores de registro2312⚠️⚠️
API REST✅✅⚠️⚠️
API de webhook para CI/CD✅❌❌✅
Métricas do Prometheus✅✅✅✅
Agentes distribuídos (remotos)✅⚠️❌⚠️
Agrupamento de contêineres / stacks✅✅❌❌
Iniciar/parar/reiniciar/atualizar contêineres✅❌❌❌
Visualizador de logs✅❌❌❌
> O Watchtower foi arquivado em dezembro de 2025 e sua última versão foi a v1.7.1 (novembro de 2023). Um fork comunitário não oficial, nicholas-fedor/watchtower, continua sendo lançado ativamente.

Plataformas de gerenciamento

Recurso drydock Arcane Komodo Dockhand
Mantido ativamente✅✅✅✅
Interface web / painel✅✅✅✅
Atualização automática de contêineres✅✅✅✅
Atualizações do Docker Compose✅✅✅✅
Atualizações compatíveis com SemVer✅❌❌✅
Monitoramento de digest✅✅✅✅
Filtragem por limite de atualização (major/minor/patch/digest)✅❌⚠️⚠️
Ordem de atualização com base em dependências⚠️✅✅?
Fila de aprovações pendentes✅❌❌❌
Backup e reversão de imagens✅❌❌❌
Verificação de vulnerabilidades✅✅❌✅
Log de auditoria✅✅✅⚠️
RBAC / funções multiusuário❌✅✅⚠️
Autenticação OIDC / SSO✅✅✅✅
Canais de gatilho / notificação2111+515+
MQTT / Home Assistant✅❌❌✅
Provedores de registro23⚠️⚠️⚠️
Métricas do Prometheus✅❌❌✅
Agentes distribuídos (remotos)✅✅✅✅
Agrupamento de contêineres / stacks✅✅✅?
> Compilado a partir da documentação e dos repositórios públicos de cada projeto, 29/08/2026. > Contribuições são bem-vindas se alguma informação for imprecisa.

Migração

Migrando do WUD (E aí, Docker?) Drydock v1.6 não carrega mais variáveis ​​de ambiente `WUD_*` ou rótulos `wud.*` em tempo de execução. Reescreva-os antes de iniciar o serviço atualizado; o estado persistido ainda migra automaticamente. Use `docker exec -it drydock node dist/index.js config migrate --dry-run` para visualizar e, em seguida, `docker exec -it drydock node dist/index.js config migrate --file .env --file compose.yaml` para reescrever a configuração para a nomenclatura `DD_*` e `dd.*`.

Roadmap

Temas e destaques da versão Esta direção cobre pelo menos os próximos doze meses, até agosto de 2027. Apenas temas gerais; consulte [CHANGELOG.md](CHANGELOG.md) para detalhes de cada versão. | Versão | Tema | Destaques | | -------------------------------------------- | --------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **v1.3.x** ✅ | Segurança e Estabilidade | Varredura Trivy, Update Bouncer, SBOM, 7 novos registros, 4 novos gatilhos, mecanismo regex re2js | | **v1.4.x** ✅ | Modernização e fortalecimento da UI | Tailwind 4 + componentes personalizados, 6 temas, paleta Cmd/K, OpenAPI 3.1, atualizações YAML nativas de composição, digitalização de slot duplo, proteção OIDC | | **v1.5.0** ✅ | Observabilidade e i18n | acionar divisão de taxonomia (`DD_ACTION_*`/`DD_NOTIFICATION_*`), visualizador de log WebSocket, personalização de painel, monitoramento de recursos, caixa de saída de notificação + DLQ, resumo de verificação de segurança, 17 localidades, repetição de ID de último evento SSE, discagem de agente de borda com autenticação Ed25519 (experimental, `DD_EXPERIMENTAL_PORTWING=true`) | | **v1.5.1** ✅ | Segurança e Manutenção | Correção pull-auth GCR/GAR, conclusão de TLS de registro (M-2), endurecimento de injeção env-var de gancho, suporte `DD_SESSION_SECRET__FILE`, redação de credencial de despejo de depuração, verificação de permissão de arquivo secreto, correção de deadlock de portão de maturidade, capacidade de tradução completa da UI + traduções da comunidade, portão de aplicação automática da janela de manutenção, exibição de tempo de atividade do contêiner, versão do software de superfície dividida de coluna Tag/Versão (rótulo OCI, com `dd.inspect.tag.path` gravação dupla + roteamento `dd.inspect.tag.version-only` opcional), correspondência de prefixo de montagem de composição opcional, modelo `${currentReleaseNotes}` var | | **v1.5.2** ✅ | Confiabilidade de políticas e tags fixadas | Retenção de política de maturidade/pular/suspender segura para recreação, detecção de reconstrução de resumo de tag fixada e insights informativos da mesma família, limpeza de candidato a reversão, prevenção de cascata de reversão, preservação de MAC explícito e comportamento de salto de registro de imagem local | | **v1.6.0** | Notificações, Política e Liberação Intel | Modelos de notificação por regra/por acionador com visualização ao vivo, preferências de sino de notificação, sincronização de preferências entre dispositivos, grade de painel personalizada de dependência zero ([#281](https://github.com/CodesWhat/drydock/issues/281)), política de atualização declarativa ([#320](https://github.com/CodesWhat/drydock/issues/320)), contagem regressiva de estabilização de maturidade + visibilidade imediata do candidato + substituição manual ([#406](https://github.com/CodesWhat/drydock/discussions/406)), painel de status de atualização acionável e global Modo de atualização `notify` / `manual` / `auto` ([#325](https://github.com/CodesWhat/drydock/discussions/325)), herança de política de tag de observador/imgset/container mais corrente empilhada → visibilidade de tag fixada mais recente ([#498](https://github.com/CodesWhat/drydock/issues/498)), fonte padronizada de 44px / notas de lançamento / ações de recurso de registro em tabela, cartões e detalhes ([#295](https://github.com/CodesWhat/drydock/discussions/295)), notificações de eventos de status de integridade ([#198](https://github.com/CodesWhat/drydock/discussions/198)), Home Assistant MQTT bidirecional, visualizações responsivas de tabela/lista de cartões, Trivy/Grype/ambas verificações em back-ends de comando ou de Docker-worker fixados, controles de extração/aquecimento de ativos do scanner, desduplicação off-heap Armazenamento SBOM, correção de varredura longa Trivy ([#490](https://github.com/CodesWhat/drydock/issues/490)), avisos de migração de taxonomia de gatilho, remoções de compatibilidade v1.6, higiene de documentos/API e conclusão de migração `/api` → `/api/v1` com um shim de compatibilidade wud-card/página inicial opcional (`DD_COMPAT_WUDCARD`). | | **v1.7.0** | Atualizações inteligentes e UX | Ordenação de atualizações com reconhecimento de dependência ([#219](https://github.com/CodesWhat/drydock/discussions/219)), política de atualização por ação ([#511](https://github.com/CodesWhat/drydock/discussions/511)), relógio unificado de maturidade/idade de atualização, links de porta clicáveis, atalhos de teclado, PWA, ajuste de contraste do tema escuro (WCAG 2.2) ([#850](https://github.com/CodesWhat/drydock/issues/850), [#865](https://github.com/CodesWhat/drydock/discussions/865)), remoção de `DD_TRIGGER_*` (fim da janela de descontinuação da v1.5.0), curl removido da imagem | | **v1.8.0** | Gestão de frota e configuração ao vivo | **Disponível para testes na v1.8.0-rc.1; GA pendente:** SQLite, fila de aprovação, configuração YAML, editores limitados de políticas de observadores/notificações/ações e modelos de resumos de segurança, atualizações paralelas e em massa seletivas ([#232](https://github.com/CodesWhat/drydock/discussions/232)), interface de dependências, inventário e limpeza de imagens, integridade da frota e atualização do inventário, agrupamento por rótulos compartilhável, roteamento por grupo exato apenas para notificações ([#1251](https://github.com/CodesWhat/drydock/pull/1251)), políticas persistentes de grupo com restrições de ações, visualização e editor da política efetiva, ajustes do Drydock sobre configurações de contêiner definidas por rótulos, login TOTP com códigos de recuperação, janelas de manutenção apenas para instalações ([#946](https://github.com/CodesWhat/drydock/discussions/946)), autenticação própria, chaves API com escopo limitado ([#469](https://github.com/CodesWhat/drydock/discussions/469)) e progresso/dispositivos do Home Assistant ([#210](https://github.com/CodesWhat/drydock/discussions/210)). **Pendente:** A configuração ao vivo ampliada precisa de decisões sobre quem controla os ajustes; o observador de listas estáticas de imagens fica para depois da GA. | | **v2.0+** | Expansão da plataforma e muito mais | Observadores Swarm/Kubernetes, sincronização GitOps, navegador de volume, imagens criadas localmente monitoradas em relação a uma base upstream declarada ([#897](https://github.com/CodesWhat/drydock/discussions/897)), gates de saúde, implementações canary, terminal web, RBAC, LDAP/AD, suporte básico ao Podman por meio de sua API compatível com Docker, CLI, imagem reforçada Wolfi, proxy de soquete | **Requisitos pendentes da comunidade:** Atualizações e reinicializações de dependências entre hosts ([#219](https://github.com/CodesWhat/drydock/discussions/219)) não foram implementadas. A maturidade por contagem de versões ([#558](https://github.com/CodesWhat/drydock/discussions/558)) inclui na v1.8 a lógica de famílias de versões, uma alternativa opcional por idade e verificação limitada de digests para aliases com versão. A contagem histórica de digests de canais sem versão continua pendente. A ordenação no mesmo host não atende aos hosts remotos. Detecção de builds locais e reconstrução segura continuam como trabalho futuro ([#897](https://github.com/CodesWhat/drydock/discussions/897)). O padrão de digests do processo ([#657](https://github.com/CodesWhat/drydock/discussions/657)) usa `DD_DEFAULTS_WATCH_DIGEST`; cada agente é configurado separadamente. Estas entradas não prometem datas de lançamento.

História da estrela

Star History Chart
---

Construído com

[![TypeScript](https://img.shields.io/badge/TypeScript_6.0-3178C6?logo=typescript&logoColor=fff)](https://www.typescriptlang.org/) [![Vue 3](https://img.shields.io/badge/Vue_3-42b883?logo=vuedotjs&logoColor=fff)](https://vuejs.org/) [![Express 5](https://img.shields.io/badge/Express_5-000?logo=express&logoColor=fff)](https://expressjs.com/) [![Vitest](https://img.shields.io/badge/Vitest_4-6E9F18?logo=vitest&logoColor=fff)](https://vitest.dev/) [![Biome](https://img.shields.io/badge/Biome_2.5-60a5fa?logo=biome&logoColor=fff)](https://biomejs.dev/) [![Node 24](https://img.shields.io/badge/Node_24_Alpine-339933?logo=nodedotjs&logoColor=fff)](https://nodejs.org/) [![Anthropic](https://img.shields.io/badge/Anthropic-CC785C?style=flat&logo=anthropic&logoColor=white)](https://claude.ai/) [![OpenAI](https://img.shields.io/badge/OpenAI-10A37F?logo=data%3Aimage%2Fsvg%2Bxml%3Bbase64%2CPHN2ZyByb2xlPSJpbWciIHZpZXdCb3g9IjAgMCAyNCAyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj48dGl0bGU%2BT3BlbkFJPC90aXRsZT48cGF0aCBmaWxsPSIjZmZmZmZmIiBkPSJNMjIuMjgxOSA5LjgyMTFhNS45ODQ3IDUuOTg0NyAwIDAgMC0uNTE1Ny00LjkxMDggNi4wNDYyIDYuMDQ2MiAwIDAgMC02LjUwOTgtMi45QTYuMDY1MSA2LjA2NTEgMCAwIDAgNC45ODA3IDQuMTgxOGE1Ljk4NDcgNS45ODQ3IDAgMCAwLTMuOTk3NyAyLjkgNi4wNDYyIDYuMDQ2MiAwIDAgMCAuNzQyNyA3LjA5NjYgNS45OCA1Ljk4IDAgMCAwIC41MTEgNC45MTA3IDYuMDUxIDYuMDUxIDAgMCAwIDYuNTE0NiAyLjkwMDFBNS45ODQ3IDUuOTg0NyAwIDAgMCAxMy4yNTk5IDI0YTYuMDU1NyA2LjA1NTcgMCAwIDAgNS43NzE4LTQuMjA1OCA1Ljk4OTQgNS45ODk0IDAgMCAwIDMuOTk3Ny0yLjkwMDEgNi4wNTU3IDYuMDU1NyAwIDAgMC0uNzQ3NS03LjA3Mjl6bS05LjAyMiAxMi42MDgxYTQuNDc1NSA0LjQ3NTUgMCAwIDEtMi44NzY0LTEuMDQwOGwuMTQxOS0uMDgwNCA0Ljc3ODMtMi43NTgyYS43OTQ4Ljc5NDggMCAwIDAgLjM5MjctLjY4MTN2LTYuNzM2OWwyLjAyIDEuMTY4NmEuMDcxLjA3MSAwIDAgMSAuMDM4LjA1MnY1LjU4MjZhNC41MDQgNC41MDQgMCAwIDEtNC40OTQ1IDQuNDk0NHptLTkuNjYwNy00LjEyNTRhNC40NzA4IDQuNDcwOCAwIDAgMS0uNTM0Ni0zLjAxMzdsLjE0Mi4wODUyIDQuNzgzIDIuNzU4MmEuNzcxMi43NzEyIDAgMCAwIC43ODA2IDBsNS44NDI4LTMuMzY4NXYyLjMzMjRhLjA4MDQuMDgwNCAwIDAgMS0uMDMzMi4wNjE1TDkuNzQgMTkuOTUwMmE0LjQ5OTIgNC40OTkyIDAgMCAxLTYuMTQwOC0xLjY0NjR6TTIuMzQwOCA3Ljg5NTZhNC40ODUgNC40ODUgMCAwIDEgMi4zNjU1LTEuOTcyOFYxMS42YS43NjY0Ljc2NjQgMCAwIDAgLjM4NzkuNjc2NWw1LjgxNDQgMy4zNTQzLTIuMDIwMSAxLjE2ODVhLjA3NTcuMDc1NyAwIDAgMS0uMDcxIDBsLTQuODMwMy0yLjc4NjVBNC41MDQgNC41MDQgMCAwIDEgMi4zNDA4IDcuODcyem0xNi41OTYzIDMuODU1OEwxMy4xMDM4IDguMzY0IDE1LjExOTIgNy4yYS4wNzU3LjA3NTcgMCAwIDEgLjA3MSAwbDQuODMwMyAyLjc5MTNhNC40OTQ0IDQuNDk0NCAwIDAgMS0uNjc2NSA4LjEwNDJ2LTUuNjc3MmEuNzkuNzkgMCAwIDAtLjQwNy0uNjY3em0yLjAxMDctMy4wMjMxbC0uMTQyLS4wODUyLTQuNzczNS0yLjc4MThhLjc3NTkuNzc1OSAwIDAgMC0uNzg1NCAwTDkuNDA5IDkuMjI5N1Y2Ljg5NzRhLjA2NjIuMDY2MiAwIDAgMSAuMDI4NC0uMDYxNWw0LjgzMDMtMi43ODY2YTQuNDk5MiA0LjQ5OTIgMCAwIDEgNi42ODAyIDQuNjZ6TTguMzA2NSAxMi44NjNsLTIuMDItMS4xNjM4YS4wODA0LjA4MDQgMCAwIDEtLjAzOC0uMDU2N1Y2LjA3NDJhNC40OTkyIDQuNDk5MiAwIDAgMSA3LjM3NTctMy40NTM3bC0uMTQyLjA4MDVMOC43MDQgNS40NTlhLjc5NDguNzk0OCAwIDAgMC0uMzkyNy42ODEzem0xLjA5NzYtMi4zNjU0bDIuNjAyLTEuNDk5OCAyLjYwNjkgMS40OTk4djIuOTk5NGwtMi41OTc0IDEuNDk5Ny0yLjYwNjctMS40OTk3WiIvPjwvc3ZnPg%3D%3D)](https://openai.com) [![SemVer](https://img.shields.io/badge/semver-2.0.0-blue)](https://semver.org/) [![Conventional Commits](https://img.shields.io/badge/commits-conventional-fe5196?logo=conventionalcommits&logoColor=fff)](https://www.conventionalcommits.org/) [![Keep a Changelog](https://img.shields.io/badge/changelog-Keep%20a%20Changelog-E05735)](https://keepachangelog.com/)

Comunidade e suporte

Chat em tempo real e suporte antecipado: **[CodesWhat Discord](https://discord.gg/mWHCPJRzSx)** Bugs e solicitações de recursos concretas vão para o **[GitHub Issues](https://github.com/CodesWhat/drydock/issues)**; perguntas abertas, ideias e demonstrações vão para o **[GitHub Discussions](https://github.com/CodesWhat/drydock/discussions)**; o chat em tempo real acontece no **[CodesWhat Discord](https://discord.gg/mWHCPJRzSx)**. ### Controle de qualidade da comunidade Obrigado aos usuários que ajudaram a testar os release candidate v1.4.0 e v1.5.0 e relataram bugs: [@RK62](https://github.com/RK62) · [@flederohr](https://github.com/flederohr) · [@rj10rd](https://github.com/rj10rd) · [@larueli](https://github.com/larueli) · [@Waler](https://github.com/Waler) · [@ElVit](https://github.com/ElVit) · [@nchieffo](https://github.com/nchieffo) · [@begunfx](https://github.com/begunfx) · [@Ra72xx](https://github.com/Ra72xx)

Parte do ecossistema CodesWhat

FerramentaFunção
drydockMonitoramento de atualização de contêiner — UI da web e mecanismo de notificação
portwingAgente Docker remoto – acesso seguro em nível de soquete de Drydock ou independente
sockguardProxy de soquete Docker – filtro de lista de permissões de negação padrão que protege o soquete
Essas três ferramentas são projetadas para serem colocadas em camadas: sockguard filtra o soquete, portwing o expõe remotamente e drydock monitora e atua no estado do contêiner. Consulte o [COMPATIBILITY.md do portwing](https://github.com/CodesWhat/portwing/blob/main/COMPATIBILITY.md) para obter a matriz de compatibilidade completa entre todas as três ferramentas. --- **[Licença AGPL-3.0](LICENSE)** CodesWhat Voltar ao topo