Sei que já existe uma resposta aceita, no entanto, queria oferecer esta solução, que acho que aborda mais diretamente a pergunta: "Como faço para baixar uma imagem do Docker sem usar o Docker para executar a recuperação?"
Eu tenho um problema semelhante, no qual as políticas da minha empresa exigem que eu forneça a uma equipe os arquivos (geralmente por meio de URL) que quero usar. Em seguida, eles executam várias verificações e auditorias e, em seguida, colocam os arquivos em nossa rede de desenvolvimento desconectada. Não posso usar o Docker para recuperar o arquivo, exportá-lo e entregá-lo a essa equipe; portanto, a outra resposta fornecida não era uma opção para mim.
Felizmente, encontrei esta resposta no StackOverflow, que recomenda o uso de uma ferramenta útil fornecida por samalba no GitHub: https://github.com/samalba/docker-registry-debug
Obviamente, essa ferramenta foi criada para ser criada usando o Docker, e parte do motivo de eu precisar disso é porque não tenho acesso aberto ao Docker :). Portanto, como eu não tinha essa opção, explicarei as etapas que eu segui aqui (tudo isso é como confirmar 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 de ondulação 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=read
curl -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 alguém!