Quero poder inspecionar o conteúdo de um contêiner do Docker (somente leitura). Uma maneira elegante de fazer isso seria montar o conteúdo do contêiner em um diretório. Estou falando de montar o conteúdo de um contêiner no host, não de montar uma pasta no host dentro de um contêiner.
Percebo que há dois drivers de armazenamento no Docker agora: aufs e btrfs. Minha própria instalação do Docker usa btrfs e a navegação em / var / lib / docker / btrfs / subvolumes mostra um diretório por contêiner do Docker no sistema. No entanto, este é um detalhe de implementação do Docker e parece errado montar - vincule esses diretórios em outro lugar.
Existe uma maneira adequada de fazer isso ou preciso corrigir o Docker para oferecer suporte a esses tipos de montagens?
fonte
Respostas:
Dê uma olhada
docker export
.Para listar rapidamente os arquivos no seu contêiner:
Exportar:
Ou para olhar para um arquivo:
O Docker 1.8 oferece suporte ao cp :
https://docs.docker.com/reference/commandline/cp/
update: você deve fazer o ssh na sua máquina docker quando executar isso.
fonte
tar x PATH-IN-CONTAINER
, ele extrairá apenas os arquivos que você precisa.tar
arquivo ainda é criado no daemon Docker, e leva vários minutos para criar ...docker export ubuntu|tar -t|grep etc/network
leva 3 segundos para mim.ubuntu
imagem é realmente pequeno ...Você pode usar o docker commit para manter o estado atual do seu contêiner em uma nova imagem e iniciar um contêiner interativo a partir dessa imagem para inspecionar o conteúdo.
A partir da documentação:
Espero que isto ajude.
fonte
Você pode usar o nsenter para executar seu programa de inspeção (que provavelmente já deve estar incluído no container) dentro de um container / namespace. Mas para montar o sistema de arquivos do contêiner como é visto dentro dele, você deve montar a imagem original e todas as camadas, se houver, ou a ação equivalente para o mapeador de dispositivos, btrfs e os outros mecanismos de armazenamento (futuros) usados, diferentes em cada caso. Provavelmente seria mais eficiente deixar o docker fazer o trabalho para você, exatamente como deveria, e usar o nsenter para fazer a inspeção dentro do contêiner.
Existem outras abordagens. O docker diff mostra quais arquivos foram alterados nesse contêiner, se você quiser ver o que foi alterado em vez do que estava na imagem original.
E para dados que devem ser persistentes e inspecionáveis, provavelmente um padrão melhor seria tê-lo em um volume no contêiner e montá-lo no sistema de arquivos real, ou em um contêiner de dados puro, ou no mesmo contêiner, mas que você pode iniciar outro contêiner com o programa de inspeção montando esses volumes a partir dele.
fonte
EDIT: Tentei a solução abaixo e, infelizmente, não funcionou bem para mim na prática. O sistema de arquivos montado não refletia com precisão o sistema de arquivos do contêiner (mesmo com
cache=no
). Não tenho certeza se este é um problema fundamental ou se estou fazendo algo errado.Você pode instalar o sshd na imagem do docker e usá-lo
docker exec
para executar um serviço ssh (/usr/sbin/sshd -D
) no contêiner do docker (observe que a porta SSH 22 do contêiner do docker precisa ser exposta).Em seguida, use
docker cp
para copiar sua chave pública ssh para o/root/.ssh/authorized_keys
diretório do contêiner do docker.Por fim, use
docker inspect
para encontrar o endereço IP do contêiner e montar o sistema de arquivos do contêiner usandoVocê teria que escrever um script para fazer isso funcionar confortavelmente na prática.
fonte