Soy completamente un novato en Docker. Traté de iniciar un contenedor salido como sigue,
Enumeré todos los contenedores disponibles usando
docker ps -a
. Enumera lo siguiente:Ingresé los siguientes comandos para iniciar el contenedor que está en la etapa de salida y entrar en el terminal de esa imagen.
docker start 79b3fa70b51d docker exec -it 79b3fa70b51d /bin/sh
Está arrojando el siguiente error.
FATA[0000] Error response from daemon: Container 79b3fa70b51d is not running
Pero cuando empiezo a usar el contenedor docker start 79b3fa70b51d
. Lanza el ID del contenedor como salida, lo cual es normal si todo funciona normalmente. No estoy seguro de qué causa este error. Cualquier idea sobre las causas y sugerencias al respecto me sería de gran ayuda. Gracias por adelantado.
docker
docker-container
Desconocido
fuente
fuente
Respuestas:
El contenedor
79b3fa70b51d
parece solo hacer unecho
.Eso significa que comienza, hace eco y luego sale de inmediato.
El siguiente
docker exec
comando no lo encontraría ejecutándose para adjuntarse a ese contenedor y ejecutar cualquier comando: es demasiado tarde. El contenedor ya salió.fuente
docker run -it --rm udhayakumar/busyboxwithtouch
debería ser suficiente para abrir una sesión. El punto de entrada predeterminado debería ser / bin / sh, pero depende de su Dockerfile: es posible que haya definido un punto de entrada diferente y / o una CMD diferente.docker exec
) puede adjuntarlo.De forma predeterminada, el contenedor de la ventana acoplable se cerrará inmediatamente si no tiene ninguna tarea ejecutándose en el contenedor.
Para mantener el contenedor ejecutándose en segundo plano, intente ejecutarlo con el argumento
--detach
(o-d
).Por ejemplo:
fuente
Si no es posible volver a iniciar el proceso principal (durante el tiempo suficiente), también existe la posibilidad de que
commit
el contenedor tenga una nueva imagen y ejecute un nuevo contenedor desde esta imagen. Si bien este no es el flujo de trabajo de mejores prácticas habitual , me resulta realmente útil depurar un script que falla de vez en cuando.fuente
bash
proceso en el contenedor. Probablemente ya tenía un servidor web en ejecución antes, por lo que tendrá que verificar qué comando debe usarse para volver a activar el servidor.En primer lugar, tenemos que iniciar el contenedor docker.
Después de eso, verifique el contenedor de la ventana acoplable:
Luego, ejecute usando el comando a continuación:
fuente
Este suele ser el caso con la mayoría de las imágenes de SO base (centos, debian, etc.), o también con las imágenes de nodo .
Su mejor opción es ejecutar la imagen en modo interactivo . Ejemplo a continuación con la imagen del nodo :
La salida es
root@cacc7897a20c:/# echo $SHELL /bin/bash
fuente
Esto es lo que funcionó para mí.
Obtenga el ID del contenedor y reinicie.
fuente
La razón es justamente lo que decía la respuesta aceptada. Agrego información adicional, que puede proporcionar una mayor comprensión sobre este problema.
Created
,Running
,Stopped
,Exited
,Dead
y otros que yo sepa.docker create
, el demonio docker creará un contenedor con su estadoCreated
.docker start
, el demonio de la ventana acoplable iniciará un contenedor existente cuyo estado puede serCreated
oStopped
.docker run
, el demonio docker lo terminará en dos pasos:docker create
ydocker start
.docker stop
, obviamente, el demonio de la ventana acoplable detendrá un contenedor. Por lo tanto, el contenedor estaría enStopped
estado.Exited
.¿Cuándo sale el proceso? En otras palabras, ¿cuál es el proceso, cómo lo iniciamos?
La respuesta está
CMD
en un dockerfile ocommand
en la siguiente expresión, que estábash
por defecto en algunas imágenes, es decir, ubutu: 18.04.fuente
Esto fue publicado por L0j1k en la siguiente publicación y funcionó para mí.
¿Cómo entro en el shell de un contenedor Docker?
fuente
Para cualquiera que intente algo similar usando un Dockerfile ...
Ejecutar en modo independiente no ayudará. El contenedor siempre saldrá (dejará de ejecutarse) si el comando no es bloqueante, este es el caso de bash.
En este caso, una solución alternativa sería: 1. Confirmar la imagen resultante: (container_name = el nombre del contenedor en el que desea basar la imagen, image_name = el nombre de la imagen que se creará docker commit container_name image_name 2. Utilice docker run para crear un nuevo contenedor usando la nueva imagen, especificando el comando que desea ejecutar. Aquí, ejecutaré "bash": docker run -it image_name bash
Esto le proporcionaría el inicio de sesión interactivo que está buscando.
fuente
docker run -it <image_id> /bin/bash
Ejecutar en modo interactivo ejecutando luego bash shell
fuente
-d
bandera es un error tipográfico aquí.Aquí hay una solución cuando el contenedor de la ventana acoplable sale normalmente y puede editar el Dockerfile.
Por lo general, cuando se ejecuta un contenedor de la ventana acoplable, una aplicación se sirve ejecutando un comando. De la referencia de Dockerfile ,
Cuando crea una imagen y no especifica ningún comando con CMD o ENTRYPOINT, se ejecutará el comando CMD o ENTRYPOINT de la imagen base.
Por ejemplo, el Dockerfile oficial de Ubuntu tiene
CMD ["/bin/bash"]
( https://hub.docker.com/_/ubuntu ). Ahora, elbin/bash/
comando puede aceptar entradas y eldocker run -it IMAGE_ID
comando adjunta STDIN al contenedor. El resultado es que obtiene una terminal interactiva y el contenedor sigue funcionando.Cuando se especifica un comando con CMD o ENTRYPOINT en el Dockerfile, este comando se ejecuta cuando se ejecuta el contenedor. Ahora, si este comando puede terminar sin requerir ninguna entrada, terminará y el contenedor saldrá.
docker run -it IMAGE_ID
se NO ofrecer el terminal interactivo en este caso. Un ejemplo sería la imagen de la ventana acoplable construida a partir del archivo Dockerfile a continuación:Si necesita ir a la terminal de esta imagen, deberá mantener el contenedor en ejecución modificando el comando entrypoint.
Después de ejecutar el contenedor normalmente con
docker run IMAGE_ID
, puede ir a otra terminal y usardocker exec -it CONTAINER_ID bash
para obtener la terminal del contenedor.fuente
En mi caso, cambié ciertos nombres de archivo y nombres de directorio del directorio principal del Dockerfile. Debido a que contenedor no encuentra los parámetros necesarios para iniciarlo de nuevo.
Después de cambiarle el nombre a los nombres originales, el contenedor comenzó como mantequilla.
fuente
Tengo una opinión diferente sobre esto. Podría hacer un
docker ps
y ver que hay un contenedor docker ejecutándose, incluso traté de reiniciarlo, pero tan pronto como intenté obtener una sesión para élNew-PSSession -ContainerId $containerId -RunAsAdministrator
, saldría un error, diciendo:Mi problema era que estaba ejecutando con el servicio de red y no tenía suficientes permisos para ver el contenedor, aunque le había otorgado permisos para ejecutar comandos de la ventana acoplable (con la configuración del grupo de seguridad de la ventana acoplable)
No sabía cómo habilitar el trabajo con contenedores, así que tuve que volver a ejecutarlo como usuario administrador.
fuente