subir propia imagen hub hacer ejecutar crear contenedor como docker

docker - propia - Cómo mostrar el comando de ejecución de un contenedor acoplable



hacer contenedor docker (10)

Utilizo una GUI de terceros (paquete Synology Docker) para configurar un contenedor acoplable. Sin embargo, su limitación me hace necesitar ejecutar el contenedor desde la línea de comandos. (Quiero asignar otra ip de host para unir el puerto)

Ahora, dado que hay muchas configuraciones que ya se han realizado, me gustaría recuperar el comando de ejecución original que inicia este contenedor, luego puedo cambiar el puerto de asignación de puertos a uno nuevo. p.ej. " docker run -p 80:8080 gitlab "

No puedo encontrar la manera de hacerlo, el evento utiliza "docker inspeccionar", no se proporciona dicha información.

Por favor brinde algunos consejos para resolver este problema.


Entonces, ¿cómo invertir el comando Docker Run de ingeniería?

Hay un repositorio de github que intenta revertir el comando de ejecución de Docker de ingeniería, pero actualmente no es perfecto, la versión es 0.1.2 . Debes seguirlo para actualizar. Tal vez algún día pueda usarlo para obtener el comando de ejecución correcto.

$ sudo pip install runlike # run the ubuntu image $ docker run -ti ubuntu bash $ docker ps -a # suppose you get the container ID 1dfff2ba0226 # Run runlike to get the docker run command. $ runlike 1dfff2ba0226 docker run --name=elated_cray -t ubuntu bash

Repositorio de Github: runlike

Actualizaciones :

Ejecutar sin instalar (Gracias @tilo)

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock / assaflavie/runlike YOUR-CONTAINER


Actualmente parece que tenemos que ir a ''docker inspeccionar'' y luego recrear manualmente el comando de ejecución.

Encontré a alguien intentando escribir un script bash para hacer esto: https://gist.github.com/miracle2k/c85b7b077fdb8d54bc89

pero está incompleto y depende de jq.


Escribí una herramienta CLI simple basada en nodos para generar un comando de docker run desde un contenedor existente.

https://www.npmjs.com/package/rekcod

Aquí hay un ejemplo:

$ docker inspect foo/bar [ { # … "Config": { # … "Cmd": [ "/usr/local/bin/script.sh" ], # … } } ]

También maneja enlaces y volúmenes montados y otras cosas.

No es súper robusto por el momento, pero maneja más que algunas de las otras cosas mencionadas, y era más de lo que estaba buscando.

EDITAR: en un solo comando, sin instalar ningún software:

$ docker inspect foo/bar | jq -r ''.[0]["Config"]["Cmd"][0]'' /usr/local/bin/script.sh


Ese comando de ejecución de Docker no se especifica en el Dockerfile ni en ningún otro documento relacionado con Docker.

Puede encontrar un ejemplo en la documentación asociada a su contenedor, o puede inferir que la ventana acoplable se ejecuta con (al menos para el mapeo de comandos y puertos) una docker ps -a (pero eso no le dará los posibles --volumes-from opciones)

Compruebe también /usr/syno/etc/packages/Docker-GitLab/config

Esto difiere de la configuración de gitlab, que en Synology está disponible en /usr/syno/etc/packages/Docker/synology_gitlab.config


Lo que podría ser una opción más simple (robusta) sería usar algo como bash-preexec para capturar comandos que comienzan con "docker run". Luego podría almacenar estos comandos en algún lugar y recuperarlos más tarde.

Por ejemplo, podría agregar algo como esto en su perfil de bash:

[[ -f ~/.bash-preexec.sh ]] && source ~/.bash-preexec.sh docker_run_history=~/.docker_run_history docker_clear_history(){ echo -n > $docker_run_history } docker_search_history(){ search_for="$@" [[ -z $search_for ]] && search_for=".*" /cat $docker_run_history | grep "$search_for" | tail -1 } docker_ps_mod(){ for c in $(docker ps --format "{{.Image}}"); do echo "Container $c was run using:" echo -e "/t$(docker_search_history $c)" done } docker_hook(){ if [[ $@ =~ ^"docker run".*$ ]]; then /echo "$@" >> $docker_run_history fi } preexec(){ docker_hook $@ }

Entonces podrías ejecutar tus cosas:

source ~/.bash_profile docker run -it --rm -v $(pwd)/data:/data -p 8080:80 image docker run -d daemon docker_ps_mod

Qué salidas:

Container image was run using: docker run -it --rm -v $(pwd)/data:/data -p 8080:80 image Container daemon was run using: docker run -d daemon



Si no desea instalar nada en la configuración actual del servidor Docker en ejecución, simplemente puede ejecutar (reemplace $CONTAINER_NAME con el nombre del contenedor en el que desea tener los argumentos de ejecución):

docker run -it--rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache nodejs nodejs-npm && npm i -g rekcod && rekcod $CONTAINER_NAME"

(para el método rekcod )

o

docker run -it--rm --volume /var/run/docker.sock:/var/run/docker.sock --privileged docker sh -c "apk add --no-cache py-pip && pip install runlike && runlike $CONTAINER_NAME"

(para el método runlike )


Una alternativa más simple (?) Es ejecutar esta plantilla de inspección de acoplador , que utiliza las capacidades integradas de creación de plantillas Go para generar un comando compatible de docker run . La plantilla solo cubre las opciones de línea de comandos más habituales, pero puede ampliarse fácilmente.

Esta solución no tiene dependencias en otras herramientas, excepto en Docker.


Use docker inspeccionar :

$ npm i -g rekcod $ rekcod redis_container docker run -d --name redis_container --restart always -h a44159e148e1 / --expose 6379/tcp -e PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin / -e REDIS_VERSION=3.0.7 -e REDIS_DOWNLOAD_URL=http://download.redis.io/releases/redis-3.0.7.tar.gz / -e REDIS_DOWNLOAD_SHA1=e56b4b7e033ae8dbf311f9191cf6fdf3ae974d1c / --entrypoint "/entrypoint.sh" redis "redis-server"

Puede analizar esto programáticamente con jq :

docker run --rm -v /var/run/docker.sock:/var/run/docker.sock nexdrew/rekcod redis_container


Utilice el siguiente comando para obtener los argumentos para todos los contenedores docker inspeccionar -f "{{.Name}} {{.Path}} {{.Args}}" $ (docker ps -a -q)