Conteúdo do contêiner do Docker de montagem no sistema de arquivos do host

20

Eu 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 sobre a montagem do conteúdo de um contêiner no host, não sobre a montagem de uma pasta no host dentro de um contêiner.

Eu posso ver que há dois drivers de armazenamento no Docker agora: aufs e btrfs. Minha própria instalação do Docker usa o btrfs e a navegação para / var / lib / docker / btrfs / subvolumes mostra-me um diretório por contêiner do Docker no sistema. No entanto, este é um detalhe de implementação do Docker e parece errado montar - ligue esses diretórios em algum outro lugar.

Existe uma maneira correta de fazer isso, ou eu preciso corrigir o Docker para suportar esses tipos de montagens?

    
por dflemstr 18.08.2014 / 18:08

4 respostas

9

Dê uma olhada em docker export .

Para listar rapidamente os arquivos em seu contêiner:

docker export CONTAINER|tar -t

Para exportar:

docker export CONTAINER>snapshot.tar
docker export CONTAINER|tar x PATH-IN-CONTAINER

Ou para ver um arquivo:

docker export CONTAINER|tar x --to-stdout PATH-IN-CONTAINER
# e.g. 
docker export consul|tar x --to-stdout etc/profile

Docker 1.8 suporta cp :

link

Usage:  docker cp [options] CONTAINER:PATH LOCALPATH|-
        docker cp [options] LOCALPATH|- CONTAINER:PATH

update: você deve fazer o ssh na sua máquina docker quando você executar isso.

    
por 29.07.2015 / 16:03
3

Você pode usar o commit do docker para manter o estado atual do contêiner em uma nova imagem e iniciar um recipiente interativo desta imagem para inspecionar o conteúdo.

Da documentação:

It can be useful to commit a container’s file changes or settings into a new image. This allows you debug a container by running an interactive shell, or to export a working dataset to another server.

Espero que isso ajude.

    
por 06.07.2015 / 16:50
2

Você pode usar o nsenter para executar seu programa de inspeção (que provavelmente já deve estar incluído no contêiner) dentro de um contêiner / namespace. Mas para montar o sistema de arquivos container como é visto dentro dele, você deve montar a imagem original e todas as camadas se for aufs, ou a ação equivalente para mapeador de dispositivo, btrfs e os outros (futuros) mecanismos de armazenamento usados, diferentes em cada caso. Provavelmente seria mais eficiente deixar o docker fazer o trabalho para você, exatamente como deveria fazer, e usar o nsenter para fazer a inspeção dentro do contêiner.

Existem outras abordagens. O docker diff mostrará quais arquivos foram alterados nesse contêiner, se você quiser ver o que mudou 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 tê-lo montado no sistema de arquivos real, ou em um contêiner de dados puro, ou no mesmo contêiner, mas você pode iniciar outro contêiner com o programa de inspeção montando esses volumes a partir dele.

    
por 14.10.2014 / 13:22
1

EDIT: Eu tentei a solução abaixo e, infelizmente, não funcionou bem para mim na prática. O sistema de arquivos montado não refletiu com precisão o sistema de arquivos do contêiner (mesmo com cache=no ). Não tenho certeza se isso é um problema fundamental ou se estou fazendo algo errado.

Você pode instalar o sshd na imagem do docker e usar docker exec para executar um serviço ssh ( /usr/sbin/sshd -D ) no contêiner docker (observe que a porta SSH 22 do contêiner da janela de encaixe precisa ser exposta).

Em seguida, use docker cp para copiar sua chave ssh pública para o diretório /root/.ssh/authorized_keys do contêiner docker.

Finalmente, use docker inspect para encontrar o endereço IP do contêiner e monte o sistema de arquivos do contêiner usando

sudo sshfs -o allow_other,default_permissions,IdentityFile=/path/to/identityfile  [email protected]:/ /mnt/my_container

Você teria que escrever um roteiro para fazer isso funcionar confortavelmente na prática.

    
por 12.05.2018 / 13:47