Percebo que já existe uma resposta Aceita, no entanto, queria oferecer essa solução que acho que aborda mais diretamente a pergunta feita: "Como faço para baixar uma imagem do Docker sem usar o Docker para realizar a recuperação?"
Tenho um problema semelhante, em que as políticas da minha empresa exigem que eu forneça a uma equipe o(S) arquivo (S) (normalmente por meio de URL) que desejo usar. Em seguida, eles realizarão várias verificações e auditorias e, em seguida, colocarão o(S) arquivo (s) em nossa rede de desenvolvimento desconectada. Não posso usar o Docker para recuperar o arquivo, exportá-lo e entregá-lo a essa equipe, então a outra resposta fornecida não era uma opção para mim.
Felizmente, eu encontrei presente responda no StackOverflow, que recomenda o uso de uma ferramenta útil fornecida pelo samalba no GitHub: https://github.com/samalba/docker-registry-debug
Claro, essa ferramenta deveria ser construída usando o Docker, e parte do motivo pelo qual preciso é porque não tenho acesso aberto ao Docker :). Então, como eu não tinha essa opção, vou soletrar as etapas que tomei aqui (isso é tudo a partir do commit 05fffc4344fd6f866f84c403caae3ba81193dd45 desse repositório):
$ go get github.com/dustin/go-humanize$ go build$ ./docker-registry-debug --help$ ./docker-registry-debug curlme docker ubuntu
A saída desse comando é uma linha de comando curl completa que pode ser usada para baixar o arquivo:
# 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=e145911c2e458b3842e4e92c90bbf5bf2c17bd56,repository="library/docker",access=readcurl -i --location-trusted -I -X GET -H "Authorization: Token signature=e145911c2e458b3842e4e92c90bbf5bf2c17bd56,repository="library/docker",access=read" https://registry-1.docker.io/v1/images/ubuntu/layer
Espero que isso ajude outra pessoa!