En la práctica para iniciar un contenedor, hago:
docker run a8asd8f9asdf0
Si ese es el caso, qué hace:
docker start
¿hacer?
En el manual dice
Iniciar uno o más contenedores detenidos
execute
?
En la práctica para iniciar un contenedor, hago:
docker run a8asd8f9asdf0
Si ese es el caso, qué hace:
docker start
¿hacer?
En el manual dice
Iniciar uno o más contenedores detenidos
execute
?
Respuestas:
Esta es una pregunta muy importante y la respuesta es muy simple, pero fundamental:
docker run IMAGE_ID
y no docker run CONTAINER_ID
docker stop CONTAINER_ID
, puede reiniciar el mismo contenedor con el comando docker start CONTAINER_ID
y los datos y la configuración serán los mismos.docker rm container_id
). Por otro lado, los datos de volúmenes sobreviven a la eliminación del contenedor a menos que la -v
opción se proporcione explícitamente en la línea de comando. La ubicación del volumen en el sistema host se puede inspeccionar directamente. Ver este artículo
&
al final de la run
línea de comando? Lo necesito como un servicio innumerable (24 horas)
run
ejecuta una imagenstart
inicia un recipiente .El docker run
documento menciona:
El
docker run
comando primero crea una capa de contenedor grabable sobre la imagen especificada y luego la inicia usando el comando especificado.Es decir, la ejecución de Docker es equivalente a la API
/containers/create
entonces/containers/(id)/start
.
No ejecuta un contenedor existente, lo ejecuta docker (desde docker 1.3) .
Puede reiniciar un contenedor salido .
-i
a docker run
un proceso interactivo? Quiero decir, Docker Run necesita una imagen para ejecutar un contenedor.
Explicación con un ejemplo:
Considere que tiene una imagen de juego (iso) en su computadora.
Cuando usted run
(monta su imagen como una unidad virtual), se crea una unidad virtual con todos los contenidos del juego en la unidad virtual y el archivo de instalación del juego se inicia automáticamente. [Ejecutando su imagen acoplable - creando un contenedor y luego iniciándolo]
Pero cuando stop
(similar a Docker lo detiene), la unidad virtual todavía existe pero detiene todos los procesos. [Como el contenedor existe hasta que no se elimina]
Y cuando lo hace start
(similar al inicio de Docker), desde la unidad virtual, los archivos de los juegos comienzan su ejecución. [comenzando el contenedor existente]
En este ejemplo: la imagen del juego es su imagen Docker y la unidad virtual es su contenedor.
La respuesta de daniele3004 ya es bastante buena.
Solo una fórmula rápida y sucia para personas como yo que se mezclan run
y start
de vez en cuando:
docker run [...]
= docker pull [...]
+docker start [...]
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.
(fuente: docs.docker.com/engine/reference/commandline/run )
run
El comando crea un contenedor a partir de la imagen y luego inicia el proceso raíz en este contenedor. Ejecutarlo con la run --rm
bandera le ahorrará la molestia de eliminar el contenedor muerto inútil después y le permitirá ignorar la existencia de docker start
y por docker remove
completo.
run
El comando hace algunas cosas diferentes:
docker run --name dname image_name bash -c "whoami"
docker ps
bash -c "whoami"
. Si se ejecuta docker run --name dname image_name
sin un comando para ejecutar el contenedor entraría en estado detenido inmediatamente.docker remove
antes de iniciar el contenedor con el mismo nombre.¿Cómo quitar el contenedor una vez que se detiene automáticamente? Agregue una--rm
bandera alrun
comando:
docker run --rm --name dname image_name bash -c "whoami"
¿Cómo ejecutar múltiples comandos en un solo contenedor? Al evitar que ese proceso raíz muera. Esto se puede hacer ejecutando algún comando inútil al comienzo con el--detached
indicador y luego usando "ejecutar" para ejecutar comandos reales:
docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"
¿Por qué necesitamos docker stop
entonces? Para detener este contenedor persistente que lanzamos en el fragmento anterior con el comando sin fintail -f /dev/null
.