A menudo me encuentro en la necesidad de volver a crear el contenedor con modificaciones menores a los argumentos utilizados originalmente para docker run (cosas como cambiar los puertos publicados, la red, la cantidad de memoria).
Ahora estoy creando imágenes y ejecutándolas en lugar de contenedores antiguos.
Esto funciona bien, pero no siempre tengo guardados los parámetros originales para docker run y, a veces (especialmente cuando hay muchas cosas que definir) se vuelve doloroso recuperarlos.
¿Hay alguna forma de recuperar los argumentos de docker run del contenedor existente?
Perdón por llegar un par de años tarde, pero tenía una pregunta similar y aún no tenía una respuesta satisfactoria, así que aún necesitaba encontrar la salida.
He encontrado dos fuentes que abordan el problema:
Para ejecutar, guárdelo en un archivo, por ejemplo,
run.tplydocker inspect --format "$(<run.tpl)" name_or_id_of_running_container
Ejecución rápida:
$ docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod <container>
Ambas soluciones son bastante simples de usar, pero la segunda no pudo generar el comando para un contenedor Nginx porque no lograron citarlo así "nginx" "-g" "daemon off;"
Por lo tanto, me concentré en la primera solución, que es una plantilla golang destinada a alimentar el parámetro --format de docker inspect . Me gustó porque era algo simple, elegante y no necesitaba ninguna otra herramienta.
Hice algunas mejoras en mi esencia bifurcada y notifiqué al autor original al respecto.
Un par de respuestas a esto. Ejecute sus contenedores usando docker-compose , luego puede ejecutar archivos de composición y conservar toda su configuración. Obviamente, compose está diseñado para aplicaciones de múltiples contenedores, pero se subestima enormemente para casos de uso de argumentos de run complejos de un solo contenedor.
El segundo es poner su comando de run en una LABEL en la imagen. Eche un vistazo a Label Schema 's docker.cmd , etc. Luego, puede recuperarlo fácilmente de la imagen (o de su Dockerfile).
la mejor manera de hacer esto es no escribir los comandos manualmente. colóquelos en un script de shell... un archivo .sh en linux/mac, o un archivo .cmd en Windows. luego, solo ejecuta el script de shell para crear su contenedor y nunca tendrá que preocuparse por volver a escribir los comandos y las opciones, nunca se equivocará, etc.
personalmente, escribo mis scripts con "scripts npm" en mi archivo package.json. pero se puede hacer lo mismo con cualquier herramienta que pueda ejecutar un programa de línea de comandos con argumentos
Hago esto junto con algunos otros trucos para asegurarme de que nunca dejo de construir mis imágenes o ejecutar mis contenedores . hace la vida con Docker mucho más fácil. :)