Não é um idiota. Visualizar o contêiner e a imagem não é a mesma coisa. Convém exibir o sistema de arquivos inicial ou até validar que não há nada malicioso na imagem antes que ela seja executada.
Keilaron
4
se não foi possível executar a imagem como contêiner, você pode usar uma ferramenta como drive ( github.com/wagoodman/dive ) ou o docker save para exportar a imagem como arquivo tar. Depois, você pode explorar o alcatrão ou, com o mergulho, pode explorar o mais rápido possível a imagem.
Obrigado. O primeiro é o que estou procurando. Explore basicamente as pastas.
pylearn
9
Estou tentando ver o conteúdo de uma imagem criada usando "FROM scratch" e não há shell disponível. Existe alguma outra maneira de ver o conteúdo? A imagem que estou tentando ver é portainer / portainer.
Juan Hernandez
2
É possível que alguém veja o conteúdo da imagem sem gerar um contêiner? Ou podemos assumir que é seguro para todos, a menos que eles tenham direitos de gerar um contêiner a partir dele?
Shabirmean
3
combinar o que foi dito anteriormente "para um contêiner do Windows com ponto de entrada": docker run -it --entrypoint cmd <image_name>funcionará.
A resposta aceita aqui é problemática, porque não há garantia de que uma imagem tenha qualquer tipo de shell interativo. Por exemplo, o zumbido / zumbido imagem contém em um único comando /drone, e ele tem um ENTRYPOINTbem, de modo que este irá falhar:
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
E isso irá falhar:
$ docker run --rm -it --entrypoint sh drone/drone
docker: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"sh\": executable file not found in $PATH".
Esta não é uma configuração incomum; muitas imagens mínimas contêm apenas os binários necessários para dar suporte ao serviço de destino. Felizmente, existem mecanismos para explorar um sistema de arquivos de imagem que não dependem do conteúdo da imagem. O mais fácil é provavelmente o docker exportcomando, que exportará um sistema de arquivos contêiner como um arquivo tar. Portanto, inicie um contêiner (não importa se falha ou não):
$ docker run -it drone/drone sh
FATA[0000] DRONE_HOST is not properly configured
Em seguida, use docker exportpara exportar o sistema de arquivos para tar:
$ docker export $(docker ps -lq) | tar tf -
O docker ps -lqsignifica "me dê o ID do contêiner do docker mais recente". Você pode substituir isso por um nome ou ID explícito de contêiner.
esta resposta é super útil para a figura que poderia ser dentro de um recipiente em um determinado momento
João Andrade
2
Esta resposta é mais correto e trabalha para mim, pois eu quero explorar conteúdo da imagem com a arquitetura externa e não posso "basta executar" ele
Vladimir Perevalov
94
Você não deve iniciar um contêiner apenas para ver o conteúdo da imagem. Por exemplo, você pode procurar conteúdo malicioso, não executá-lo. Use "create" em vez de "run";
docker create --name="tmp_$$" image:tag
docker export tmp_$$ | tar t
docker rm tmp_$$
A segunda linha acima apenas lista o conteúdo do sistema de arquivos. Se você deseja obter todos os arquivos como um alcatrão, pode substituí-lo por algo como docker export tmp_$$ > image-fs.tar.
Pino
Qual será a segunda linha do sistema operacional Windows? O docker export tmp_$$ | tar tnão vai funcionar.
Alexei Marinichenko 29/08/19
@Alexei Marinichenko tarpode não estar instalado em sua máquina. Tente tar --helpverificar isso.
Abdurrahman I.
1
Isso também funciona se não houver concha no contêiner #
612 Peter Dotchev
3
@AlexeiMarinichenko, você pode usar o -oparâmetro para especificar o arquivo no qual gravar. Por exemplo docker export -o c:\temp\tmp_$$.tar tmp_$$.
GiddyUpHorsey
62
docker save nginx > nginx.tar
tar -xvf nginx.tar
Os seguintes arquivos estão presentes:
manifest.json - Descreve as camadas do sistema de arquivos e o nome do arquivo json que possui as propriedades Container.
.json - propriedades do contêiner
- Cada diretório "layerid" contém um arquivo json que descreve a propriedade e o sistema de arquivos da camada associados a essa camada. O Docker armazena imagens de contêiner como camadas para otimizar o espaço de armazenamento reutilizando camadas nas imagens.
Essa parece ser a resposta mais útil para mim, pois você não precisa iniciar um contêiner para obter os arquivos.
Alec Thomas
1
Concordo absolutamente com o @AlecThomas - e, para dar um passo adiante, por que eu preciso dockerapenas ver o conteúdo do que é, essencialmente, apenas um tipo diferente de arquivo morto?
Ed Randall
boa resposta, também gostaria de especificar o tag: docker save --output nginx.tar nginx:latest, caso contrário, de acordo com o documento, ele irá conter "todas as camadas pai, e todas as etiquetas + versões"
Tarek
Isso deve ser votado, pois provavelmente é a única maneira de explorar os internos, se você não tiver nenhum utilitário do Unix. Além disso, esse caminho não requer a criação de um contêiner.
Stanislav German-Evtushenko
9
Para listar o conteúdo detalhado de uma imagem, é necessário executar o docker run --rm image/name ls -alRlocal em que --rmsignifica remover assim que sair do formulário.
O problema com esta resposta é que, conforme discutido na resposta aceita, não há garantia de que sua imagem tenha qualquer shell nela. Or ls. Ou realmente qualquer ferramenta comum.
larsks 07/01
4
Podemos tentar um mais simples da seguinte maneira:
Isso não mostra o conteúdo ; mostra apenas as camadas etc. que foram usadas na construção da imagem.
Roger Lipscombe
0
Com o Docker EE para Windows (17.06.2-ee-6 no Hyper-V Server 2016), todo o conteúdo dos Windows Containers pode ser examinado no C:\ProgramData\docker\windowsfilter\caminho do sistema operacional host.
Não é necessária montagem especial.
O prefixo da pasta pode ser encontrado pelo ID do contêiner da docker ps -asaída.
Existe uma ferramenta gratuita de código aberto chamada Anchore que você pode usar para digitalizar imagens de contêineres. Este comando permitirá listar todos os arquivos em uma imagem de contêiner
conteúdo da imagem anchore-cli myrepo / app: arquivos mais recentes
Respostas:
Você pode simplesmente executar um contêiner de shell interativo usando essa imagem e explorar qualquer conteúdo que a imagem tenha.
Por exemplo:
Ou seguindo para imagens com um
entrypoint
Ou, se você quiser ver como a imagem foi criada, ou seja, as etapas
Dockerfile
, é possível:As etapas serão registradas no
image_history
arquivo.fonte
docker run -it --entrypoint cmd <image_name>
funcionará.A resposta aceita aqui é problemática, porque não há garantia de que uma imagem tenha qualquer tipo de shell interativo. Por exemplo, o zumbido / zumbido imagem contém em um único comando
/drone
, e ele tem umENTRYPOINT
bem, de modo que este irá falhar:E isso irá falhar:
Esta não é uma configuração incomum; muitas imagens mínimas contêm apenas os binários necessários para dar suporte ao serviço de destino. Felizmente, existem mecanismos para explorar um sistema de arquivos de imagem que não dependem do conteúdo da imagem. O mais fácil é provavelmente o
docker export
comando, que exportará um sistema de arquivos contêiner como um arquivo tar. Portanto, inicie um contêiner (não importa se falha ou não):Em seguida, use
docker export
para exportar o sistema de arquivos paratar
:O
docker ps -lq
significa "me dê o ID do contêiner do docker mais recente". Você pode substituir isso por um nome ou ID explícito de contêiner.fonte
Você não deve iniciar um contêiner apenas para ver o conteúdo da imagem. Por exemplo, você pode procurar conteúdo malicioso, não executá-lo. Use "create" em vez de "run";
fonte
docker export tmp_$$ > image-fs.tar
.docker export tmp_$$ | tar t
não vai funcionar.tar
pode não estar instalado em sua máquina. Tentetar --help
verificar isso.-o
parâmetro para especificar o arquivo no qual gravar. Por exemplodocker export -o c:\temp\tmp_$$.tar tmp_$$
.Os seguintes arquivos estão presentes:
https://sreeninet.wordpress.com/2016/06/11/looking-inside-container-images/
OU
você pode usar o mergulho para visualizar o conteúdo da imagem interativamente com a TUI
https://github.com/wagoodman/dive
fonte
docker
apenas ver o conteúdo do que é, essencialmente, apenas um tipo diferente de arquivo morto?docker save --output nginx.tar nginx:latest
, caso contrário, de acordo com o documento, ele irá conter "todas as camadas pai, e todas as etiquetas + versões"Para listar o conteúdo detalhado de uma imagem, é necessário executar o
docker run --rm image/name ls -alR
local em que--rm
significa remover assim que sair do formulário.fonte
ls
disponível e naPATH
EXPLORANDO A IMAGEM DO DOCKER !
Descobrir que tipo de concha é lá
bash
oush
ou ...Inspecione a imagem primeiro:
docker inspect name-of-container-or-image
Procure
entrypoint
oucmd
no retorno de json.Então faça:
docker run --rm -it --entrypoint=/bin/bash name-of-image
uma vez dentro do:
ls -lsa
ou qualquer outro comando do shell como:cd ..
A
-it
significa interativo ... e tty. os--rm
suportes para remover o recipiente após a execução.fonte
ls
. Ou realmente qualquer ferramenta comum.Podemos tentar um mais simples da seguinte maneira:
Isso funcionou na versão Docker:
fonte
Com o Docker EE para Windows (17.06.2-ee-6 no Hyper-V Server 2016), todo o conteúdo dos Windows Containers pode ser examinado no
C:\ProgramData\docker\windowsfilter\
caminho do sistema operacional host.Não é necessária montagem especial.
O prefixo da pasta pode ser encontrado pelo ID do contêiner da
docker ps -a
saída.fonte
Existe uma ferramenta gratuita de código aberto chamada Anchore que você pode usar para digitalizar imagens de contêineres. Este comando permitirá listar todos os arquivos em uma imagem de contêiner
conteúdo da imagem anchore-cli myrepo / app: arquivos mais recentes
https://anchore.com/opensource/
fonte