Quero baixar manualmente uma imagem do Docker do Docker Hub . Mais especificamente, quero baixar uma imagem do Docker do Docker Hub em uma máquina em um ambiente restrito que não possui (e não pode) ter o software cliente do Docker instalado. Eu pensaria que isso seria possível usando a API oficial , mas isso não parece ser o caso - consulte a seguinte discussão:
É realmente o caso de a API não suportar o download de imagens? Existe uma maneira de contornar isso?
ATUALIZAÇÃO 1:
Me deparei com a seguinte postagem ServerFault:
A solução aceita usa o docker save
comando, o que não ajuda na minha situação. Mas outra solução publicada lá cita a seguinte postagem do StackOverflow:
Uma das soluções refere-se a uma ferramenta de linha de comando chamada docker-registry-debug que, entre outras coisas, pode gerar um curl
comando para baixar uma imagem. Aqui está o que eu tenho:
user@host:~$ docker-registry-debug curlme docker ubuntu
# Reading user/passwd from env var "USER_CREDS"
# No password provided, disabling auth
# Getting token from https://index.docker.io
# Got registry endpoint from the server: https://registry-1.docker.io
# Got token: signature=1234567890abcde1234567890abcde1234567890,repository="library/docker",access=read
curl -i --location-trusted -I -X GET -H "Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository="library/docker",access=read" https://registry-1.docker.io/v1/images/ubuntu/layer
user@host:~$ curl \
-i --location-trusted -I -X GET \
-H "Authorization: Token signature=1234567890abcde1234567890abcde1234567890,repository="library/docker",access=read"
https://registry-1.docker.io/v1/images/ubuntu/layer
HTTP/1.1 404 NOT FOUND
Server: gunicorn/18.0
Date: Wed, 29 Nov 2017 01:00:00 GMT
Expires: -1
Content-Type: application/json
Pragma: no-cache
Cache-Control: no-cache
Content-Length: 29
X-Docker-Registry-Version: 0.8.15
X-Docker-Registry-Config: common
Strict-Transport-Security: max-age=31536000
Infelizmente, parece que o curl
comando gerado não funciona.
ATUALIZAÇÃO 2:
Parece que sou capaz de baixar blobs de camada do Docker Hub. Aqui está como eu estou indo sobre isso atualmente.
Obtenha um token de autorização:
user@host:~$ export TOKEN=\
"$(curl \
--silent \
--header 'GET' \
"https://auth.docker.io/token?service=registry.docker.io&scope=repository:library/ubuntu:pull" \
| jq -r '.token' \
)"
Puxe um manifesto de imagem:
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq '.'
Puxe um manifesto de imagem e extraia as somas do blob:
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq -r '.fsLayers[].blobSum'
sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4
sha256:be588e74bd348ce48bb7161350f4b9d783c331f37a853a80b0b4abc0a33c569e
sha256:e4ce6c3651b3a090bb43688f512f687ea6e3e533132bcbc4a83fb97e7046cea3
sha256:421e436b5f80d876128b74139531693be9b4e59e4f1081c9a3c379c95094e375
sha256:4c7380416e7816a5ab1f840482c9c3ca8de58c6f3ee7f95e55ad299abbfe599f
sha256:660c48dd555dcbfdfe19c80a30f557ac57a15f595250e67bfad1e5663c1725bb
Faça o download de um blob de camada única e grave-o em um arquivo:
user@host:~$ BLOBSUM=\
"sha256:a3ed95caeb02ffe68cdd9fd84406680ae93d633cb16422d00e8a7c22955b46d4"
user@host:~$ curl \
--silent \
--location \
--request GET \
--header "Authorization: Bearer ${TOKEN}" \
"https://registry-1.docker.io/v2/library/ubuntu/blobs/${BLOBSUM}" \
> "${BLOBSUM/*:/}.gz"
Escreva todas as somas do blob em um arquivo:
user@host:~$ curl \
--silent \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
'https://registry-1.docker.io/v2/library/ubuntu/manifests/latest' \
| jq -r '.fsLayers[].blobSum' > ubuntu-blobsums.txt
Faça o download de todos os blobs de camada do manifesto:
user@host:~$ while read BLOBSUM; do
curl \
--silent \
--location \
--request 'GET' \
--header "Authorization: Bearer ${TOKEN}" \
"https://registry-1.docker.io/v2/library/ubuntu/blobs/${BLOBSUM}" \
> "${BLOBSUM/*:/}.gz"; \
done < blobsums.txt
Agora eu tenho vários blobs de camada e preciso recombiná-los em uma imagem - eu acho.
Links Relacionados:
Fóruns da comunidade Docker: API do Docker Hub recuperar imagens
Fóruns da comunidade Docker: Download manual de imagens do Docker Hub
Edição no Docker # 1016: obtenha imagens do docker sem o comando docker. por exemplo, com o wget
StackOverflow: Como baixar imagens do docker sem usar o comando pull?
StackOverflow: URL do registro oficial do Docker (Docker Hub)
Respostas:
Portanto, o Moby Project possui um shell script no Moby Github que pode baixar imagens do Docker Hub em um formato que pode ser importado para o Docker:
A sintaxe de uso para o script é fornecida pelo seguinte:
A imagem pode ser importada com
tar
edocker load
:Para verificar se o script funciona conforme o esperado, baixei uma imagem do Ubuntu do Docker Hub e carreguei no Docker:
Na prática, eu teria que primeiro copie os dados do cliente internet (o que não tem Docker instalado) para a máquina de destino / destino (que não têm Docker instalado):
e carregue e use a imagem no host de destino:
fonte
The machine with internet connectivity does not and cannot have Docker installed
. mas você se inscreveudocker load
Existe uma ferramenta chamada Skopeo que pode recuperar imagens do Docker de um repositório e salvá-las em vários formatos.
Por exemplo:
Faça o download da imagem e salve as camadas como um tarball:
skopeo copy docker://ubuntu docker-archive:/tmp/ubuntu.tar:ubuntu
Transfira
/tmp/ubuntu.tar
para outra máquina, se desejar.Carregue a imagem em uma instância do Docker que não possui conexão à Internet:
docker load --input /tmp/ubuntu.tar
Está disponível no repositório do CentOS 7 com o nome do pacote
skopeo
. Não há pacotes Debian ou Ubuntu no momento (mas é fácil compilar).fonte
obrigado pela motivação. Eu fiz uma versão powerhell dele. Confira ... Com ele, você pode mover contêineres do dockerhub para redes de docker restritas com uma área de trabalho do windows e uma ferramenta ssh-scp para a docker machine sem direitos de administrador ou root
https://gitlab.com/Jancsoj78/dockerless_docker_downloader uma nova ferramenta hacker :)
fonte
Para mim, não está completamente claro o que você está tentando alcançar e por que as tentativas não são uma solução para o problema. Se eu precisar resolver esse problema, gostaria que o @Tensibai e outras perguntas e respostas indicadas fizessem uma janela de encaixe primeiro em um sistema com conectividade à Internet, salve a imagem da janela de encaixe, copie-a para a máquina sem conectividade à Internet, carregue a imagem e execute-a .
Demonstração
Não há imagens no sistema A:
Puxe uma imagem do dockerhub:
Salvar imagem da janela de encaixe:
Copie a imagem da janela de encaixe para systemB e carregue-a.
fonte
Aqui está um script python adaptado, com uma solução independente do SO: docker-drag
Use-o assim e criará um arquivo TAR que você poderá importar usando o docker load:
fonte
{}
botão (código) na barra superior do editor para formatá-lo.