Ao usar imagens do Docker de registros, geralmente preciso ver os volumes criados pelos contêineres da imagem.
Nota: Estou usando o docker versão 1.3.2 no Red Hat 7.
Exemplo
A postgres
imagem oficial do Docker Registry tem um volume configurado para contêineres em /var/lib/postgresql/data
.
Qual é o comando mais sucinto para mostrar o volume /var/lib/postgresql/data
em um postgres
contêiner?
Respostas:
Use
docker ps
para obter o ID do contêiner.Então
docker inspect -f '{{ .Mounts }}' containerid
Exemplo:
terminal 1
terminal 2
A saída
é, aparentemente, devido ao uso da linguagem Go para implementar as ferramentas de comando do docker.
O
docker inspect
comando sem o-f format
é bastante detalhado. Como é JSON, você pode canalizar para python ou nodejs e extrair o que precisar.docker history <image name>
mostrará as camadas criadas em uma imagem. Infelizmente,docker history
parece prejudicado por sua formatação e falta de opções para escolher o que é exibido.Você pode escolher os formatos resumido e detalhado, por meio do sinalizador --no-trunc.
Aqui está um exemplo detalhado.
fonte
Com a janela de encaixe 1.10, agora você tem novos comandos para contêineres de volume de dados.
(para contêineres regulares, consulte a próxima seção, para o docker 1.8+):
docker volume ls
docker volume inspect
Com o docker 1.8.1 (agosto de 2015), um
docker inspect -f '{{ .Volumes }}' containerid
estaria vazio!Agora você precisa verificar
Mounts
, que é uma lista de caminhos montados, como:Se você deseja o caminho da primeira montagem (por exemplo), seria (usando o índice 0):
Como Mike Mitterer comenta abaixo :
Ou, como comentado por Mitja , use o
jq
comando .fonte
jq
pacote no ubuntu e depois canalizá-lo:docker inspect -f '{{ json .Mounts }}' containerid | jq
Mostrar nomes e destinos do ponto de montagem dos volumes usados por um contêiner:
Isso é compatível com o Docker 1.13.
fonte
Na verdade, pesquisei isso no Google e encontrei minha própria resposta :) Minha memória hoje em dia ... E para aqueles que não sabem sobre isso commandlinefu é um bom lugar para encontrar e publicar esses trechos.
Listar volumes da janela de encaixe por contêiner.
Exemplo de saída.
fonte
Você pode obter informações sobre quais volumes foram especificamente projetados no contêiner, inspecionando o contêiner e procurando na saída JSON e comparando alguns dos campos. Quando você executa
docker inspect myContainer
, os camposVolumes
eVolumesRW
fornecem informações sobre TODOS os volumes montados dentro de um contêiner, incluindo volumes montados no Dockerfile com aVOLUME
diretiva e na linha de comando com odocker run -v
comando. No entanto, você pode isolar quais volumes foram montados no contêiner usando odocker run -v
comando verificando oHostConfig.Binds
campo nadocker inspect
saída JSON. Para esclarecer, esseHostConfig.Binds
campo informa quais volumes foram montados especificamente em seudocker run
comando com o-v
opção. Portanto, se você fizer uma referência cruzada desse campo com oVolumes
campo, poderá determinar quais volumes foram inseridos no contêiner usandoVOLUME
diretivas no Dockerfile.Um grep poderia fazer isso como:
E...
E no meu exemplo, você pode ver que eu montei
/var/docker/docker-registry/config
no contêiner/registry
usando a-v
opção no meudocker run
comando e montei os volumes/data
e/config
usando aVOLUME
diretiva no meu Dockerfile. O contêiner não precisa estar em execução para obter essas informações, mas precisa ter sido executado pelo menos uma vez para preencher aHostConfig
saída JSON do seudocker inspect
comando.fonte
HostConfig.Binds
e como é diferente do.Volumes
visto na resposta do @Paul?.Volumes
lista "caminhos de ponto de montagem (cadeias) de mapeamento de objetos dentro do contêiner para objetos vazios" eHostConfig.Binds
descreve a ligação real volumes montados no contêiner. Parece-me então queHostConfig.Binds
é isso que você quer ler.Volumes
, apesar de eu gostar de ouvir um raciocínio melhor.#docker
Freenode (o canal principal do docker) e, se ouvir algo de volta, definitivamente atualizarei aqui com mais informações. É uma pergunta muito boa que você fez aqui sobre a diferença. Obrigado!HostConfig.Binds
só é preenchido quando o caminho do host do volume é especificado? Por exemplo,docker run -d -v /docker-test:/docker-test postgres
vsdocker run -d -v /docker-test postgres
. Parece que o docker lida com esses dois casos de volume de maneira bastante diferente por algum motivo.Para o Docker 1.8, eu uso:
fonte
se você quiser listar todos os nomes de contêineres com os volumes relevantes anexados a cada contêiner, tente:
saída de exemplo:
/ opt_rundeck_1 - nome do contêiner
[..] - volumes anexados ao conatiner
fonte
Aqui está um comando de linha para obter as informações de volume para a execução de contêineres:
A saída é:
Versão do Docker:
fonte
Variação útil para usuários que compõem o docker:
Isso produzirá muito bem informações de volume analisáveis. Exemplo do meu wordpress docker-compose:
A saída contém uma linha para cada contêiner, listando os volumes (e pontos de montagem) usados. Altere a parte {{.Name}}: {{.Destination}} para exibir as informações que você deseja.
Se você deseja apenas uma lista simples de volumes, um por linha
Ótimo para gerar uma lista de volumes para backup. Eu uso essa técnica junto com o Blacklabelops Volumerize para fazer backup de todos os volumes usados por todos os contêineres em uma janela de encaixe. Os documentos para Volumerize não o chamam, mas você não precisa usá-lo em um contêiner persistente ou usar os recursos internos para iniciar e interromper serviços. Prefiro deixar operações críticas, como backup e controle de serviço, para o usuário real (janela de encaixe externa). Meus backups são acionados pela conta de usuário real (sem docker) e usam o docker-compose stop para interromper os serviços, fazem backup de todos os volumes em uso e, finalmente, o docker-compose começa a reiniciar.
fonte
fonte
Aqui está minha versão para encontrar pontos de montagem de uma composição do docker. Use isso para fazer backup dos volumes.
Esta é uma combinação de soluções anteriores.
fonte
Se você estiver usando o pwsh (núcleo do powershell), poderá tentar
você também pode ver o nome do contêiner e as montagens como abaixo
Como a saída é convertida como json, você pode obter todas as propriedades que ela possui.
fonte
Podemos fazer isso sem a sintaxe do modelo -f Go:
A primeira operação jq
jq .[]
retira o{}
wrapper do objeto .A segunda operação jq retornará todos os itens de montagem.
fonte