Sign inSign up

st693ava/docker-git-volume

By st693ava

•Updated 4 days ago

Plugin Docker de volumes: clona repositórios Git (privados via SSH) para o Compose

Plugin
0

21

st693ava/docker-git-volume repository overview

⁠docker-git-volume

Plugin Docker (volume driver) que clona repositórios Git como volumes. Declara o repositório directamente no docker-compose.yml e o Docker trata do clone e das actualizações.

services:
  web:
    image: nginx:alpine
    ports: ["8080:80"]
    volumes:
      - APP:/usr/share/nginx/html:ro

volumes:
  APP:
    driver: st693ava/docker-git-volume:0.2.0
    driver_opts:
      repo: "owner/website"
      branch: "main"
      path: "public"          # opcional: só esta subpasta do repositório

⁠Instalação

Publica-se uma tag por arquitectura (0.2.0-amd64 e 0.2.0-arm64). O --alias dá ao driver o mesmo nome em todas as máquinas:

ARCH=$(docker info --format '{{.Architecture}}' | sed 's/x86_64/amd64/; s/aarch64/arm64/')

docker plugin install st693ava/docker-git-volume:0.2.0-$ARCH \
  --alias st693ava/docker-git-volume:0.2.0 --grant-all-permissions

Para repositórios privados, aponta o plugin para o directório .ssh do host (ver abaixo):

docker plugin install st693ava/docker-git-volume:0.2.0-$ARCH \
  --alias st693ava/docker-git-volume:0.2.0 --grant-all-permissions \
  ssh.source=$HOME/.ssh

O plugin corre sem capabilities adicionais e não precisa de directórios no host.

⁠Opções (driver_opts)

OpçãoDefaultDescrição
repo—owner/nome (GitHub) ou host/owner/nome (ex.: gitlab.com/owner/nome)
url—URL completo, em alternativa a repo (https://…, ssh://…, user@host:caminho)
branch / tag / commitbranch por defeito do repoVersão a clonar (só uma delas). commit aceita hash completo ou abreviado
ref—Alternativa genérica a branch/tag/commit
pathraiz do repositórioSubpasta a expor como volume. O .git nunca fica visível
depth1Profundidade do clone (0 para clone completo)
pull_on_mounttrueActualizar em cada mount (nunca enquanto outro container usa o volume)

Indica repo ou url. Opções desconhecidas ou inválidas são rejeitadas logo no docker volume create.

⁠Repositórios privados (SSH)

O plugin corre isolado, por isso não vê o ~/.ssh do host. O mount ssh (só de leitura) disponibiliza-o:

# num plugin já instalado
docker plugin disable st693ava/docker-git-volume:0.2.0
docker plugin set st693ava/docker-git-volume:0.2.0 ssh.source=/caminho/para/.ssh
docker plugin enable st693ava/docker-git-volume:0.2.0
  • Usa as chaves id_* (sem .pub) do directório, copiadas para um directório temporário com permissões 0600 só durante cada operação git. O ssh_config do host não é lido.
  • As chaves não podem ter passphrase. O ideal é uma deploy key só de leitura por repositório.
  • Hosts novos são aceites na primeira ligação e guardados no estado do plugin.
  • Com GIT_PROTOCOL=auto (defeito), repo: owner/nome usa SSH se houver chaves e HTTPS caso contrário.
  • O directório tem de existir no host do daemon. Em macOS com Docker Desktop/OrbStack é o da VM Linux (por exemplo, algo dentro de /Users).

⁠Variáveis do plugin

Definem-se com docker plugin set (com o plugin desactivado):

VariávelDefaultDescrição
GIT_HOSTgithub.comHost usado por repo: owner/nome
GIT_PROTOCOLautoauto, ssh ou https
GIT_TIMEOUT10mTimeout de cada operação git
LOG_LEVELinfodebug, info, warn ou error

⁠Notas

  • O clone acontece no primeiro mount, por isso o arranque do container espera por ele. Usa depth baixo em repositórios grandes.
  • O clone é feito para um directório temporário e só no fim é movido para o destino: uma falha a meio não deixa o volume bloqueado.
  • O working tree fica em detached HEAD. No pull, alterações a ficheiros versionados são descartadas.
  • As opções ficam fixadas na criação do volume. Para mudar de versão, recria o volume (docker compose down -v).
  • Evita tokens em url (ficam em texto simples no estado do plugin e no .git/config). Prefere SSH.
  • Protocolos permitidos: https, http, ssh e git.

Licença: MIT.

Tag summary

Content type

Plugin

Digest

sha256:688ae52a8…

Size

14 MB

Last updated

4 days ago

docker plugin install st693ava/docker-git-volume:0.2.0-amd64