Descargar la imagen de Docker para transferirla a una máquina no conectada a Internet

57

Estoy trabajando en una oficina donde mi computadora portátil está conectada a Internet, pero está estrictamente controlada. No tengo permiso para instalar software no autorizado en él.

Mi estación de trabajo de desarrollo es mía para hacer lo que quiera, pero no tiene conexión a Internet.

¿Hay alguna manera de que descargue las imágenes de Docker desde el hub como un archivo que luego podría escanear a mi estación de trabajo de desarrollo? ¿De manera similar a cómo puedo descargar RPM o Ruby Gems y grabarlos en un CD? ¿O es la única forma de descargar las imágenes usando el comando 'docker pull'?

shearn89
fuente

Respuestas:

87

Corto: use el savecomando CLI.

https://docs.docker.com/engine/reference/commandline/save/


Puede extraer la imagen en una computadora que tenga acceso a Internet.

sudo docker pull ubuntu

Luego puedes guardar esta imagen en un archivo

sudo docker save -o ubuntu_image.docker ubuntu

Transfiera el archivo en la computadora fuera de línea (USB / CD / lo que sea) y cargue la imagen del archivo:

sudo docker load -i ubuntu_image.docker

(En versiones anteriores esto era solo docker load image.docker, vea los comentarios para obtener más información).

Booba Skaya
fuente
impresionante, le dará un giro esta noche. ¡Gracias!
shearn89
2
Pase, se dio cuenta de que ya no usan docker load <image>, en su lugar, use docker load < ubuntu_image.dockeren su lugar. docs.docker.com/engine/reference/commandline/load
Lionel Chan
11
tenía que hacer sudo docker load -i ubuntu_image.dockero no funcionaría
John Culviner
Tengo la misma configuración que @ shearn89, después de tirar de una máquina local usando dockertools y mover el archivo al entorno de desarrollo, obtengo el error 'no se puede cargar la imagen de Linux en Windows'. Tanto la máquina local como los entornos de desarrollo son ventanas, ¿sabe qué pasa con este flujo de trabajo que hace que se cree una imagen de Linux?
Ryan Haunfelder
27

Me doy cuenta de que ya hay una respuesta aceptada, sin embargo, quería ofrecer esta solución que creo que aborda más directamente la pregunta: "¿Cómo descargo una imagen de Docker sin usar Docker para realizar la recuperación?"

Tengo un problema similar, en el que las políticas de mi empresa requieren que proporcione a un equipo los archivos (normalmente a través de la URL) que quiero usar. Luego realizarán varios escaneos y auditorías, y luego colocarán los archivos en nuestra red de desarrollo desconectada. No puedo usar Docker para recuperar el archivo, luego exportarlo y entregarlo a ese equipo, por lo que la otra respuesta proporcionada no era una opción para mí.

Afortunadamente, encontré esta respuesta en StackOverflow, que recomienda usar una herramienta útil provista por samalba en GitHub: https://github.com/samalba/docker-registry-debug

Por supuesto, esa herramienta fue creada con Docker, y parte de la razón por la que la necesito es porque no tengo acceso abierto a Docker :). Entonces, como no tenía esa opción, explicaré los pasos que tomé aquí (todo esto es a partir de commit 05fffc4344fd6f866f84c403caae3ba81193dd45 de ese repositorio):

$ go get github.com/dustin/go-humanize
$ go build
$ ./docker-registry-debug --help
$ ./docker-registry-debug curlme docker ubuntu

La salida de ese comando es una línea de comando curl completa que se puede usar para descargar el archivo:

# 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 esto ayude a alguien más!

Dan
fuente