Ejecuta una imagen de Docker como contenedor


604

Construí una imagen Docker a partir de un dockerfile. Veo que la imagen se creó correctamente, pero ¿qué hago con ella? ¿No debería poder ejecutarse como un contenedor?

Respuestas:


855

La forma específica de ejecutarlo depende de si le dio a la imagen una etiqueta / nombre o no.

$ docker images
REPOSITORY          TAG                 ID                  CREATED             SIZE
ubuntu              12.04               8dbd9e392a96        4 months ago        131.5 MB (virtual 131.5 MB)

Con un nombre (usemos Ubuntu ):

$ docker run -i -t ubuntu:12.04 /bin/bash

Sin un nombre, solo usando la ID:

$ docker run -i -t 8dbd9e392a96 /bin/bash

Consulte la referencia de ejecución de Docker para obtener más información.


44
Entonces, ¿los nombres amigables para los humanos impresos bajo 'NOMBRE' docker ps -ano son útiles aquí?
ThorSummoner

11
docker psenumera contenedores, no imágenes. Si desea crear una imagen desde un contenedor, debe hacerlo docker commit. Puedes usar el NOMBRE en la confirmación (por ejemplo docker commit _NAME_ _imagename_)
Andy

8
@Andy ¿Por qué usamos / bin / bash al final? Soy nuevo también
Raheel

66
@RaheelKhan Debido a que su imagen acoplable necesita algo para ejecutarse. Puede reemplazar eso con un programa que haya instalado. / bin / bash es solo un práctico shell que ya está instalado.
Ryan Shillington

Si necesita agregar una variable de entorno, puede ejecutar la ventana acoplable -i -t -e ROOT_PASSWORD = root ubuntu: 12.04
Balaji Radhakrishnan

70

Haz los siguientes pasos:

  1. $ docker images

    Obtendrá una lista de todas las imágenes locales de Docker con las etiquetas especificadas.

  2. $ docker run image_name:tag_name

    Si no lo especificó tag_name, se ejecutará automáticamente una imagen con la etiqueta 'más reciente'.

    En lugar de image_name, también puede especificar una ID de imagen (sin nombre de etiqueta).


35
  • Para enumerar las imágenes de Docker

    $ docker images
    
  • Si su aplicación quiere ejecutarse con el puerto 80, y puede exponer un puerto diferente para enlazar localmente, diga 8080:

    $ docker run -d --restart=always -p 8080:80 image_name:version
    

21

Puedes ver tus imágenes disponibles usando:

docker images

Luego puede ejecutar en modo separado para que su terminal todavía sea utilizable. Tiene varias opciones para ejecutarlo usando un nombre de repositorio (con o sin etiqueta) o ID de imagen:

docker run -d repository
docker run -d repository:tag
docker run -d image_id

Luego puede verificar que su contenedor se esté ejecutando usando

docker ps

docker psle da una identificación de contenedor. Puede usarlo o solo los 2/3 primeros caracteres para ingresar a su contenedor usando:

docker exec -it container_id /bin/bash

Y puedes detenerlo usando docker stop container_idy docker rm container_id.

También puede ejecutar su contenedor con -rmargumentos, por lo que si lo detiene, se eliminará automáticamente.


1
La opción --rm (nota: ¡2 guiones no solo!) Es oro !!!, mi sistema está lleno de contenedores detenidos (muertos).
Johan Snowgoose

13

Obtenga el nombre o la identificación de la imagen que desea ejecutar con este comando:

docker images

El comando de ejecución Docker se utiliza de la siguiente manera:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

A continuación, he incluido las opciones de despacho, nombre, publicación, volumen y reinicio antes de especificar el nombre o id de la imagen:

docker run -d --name  container-name -p localhost:80:80 -v $HOME/myContainer/configDir:/myImage/configDir --restart=always image-name

Dónde:

--detach , -d        Run container in background and print container ID
--name                Assign a name to the container
--publish , -p        Publish a container’s port(s) to the host
--volume , -v        Bind mount a volume
--restart            Restart policy to apply when a container exits

Para obtener más información, consulte la referencia oficial de ejecución de Docker .


5

Aquí hay un ejemplo para ejecutar un servicio webdev en Docker. El nombre de la imagen es morrisjobke / webdav . Puede extraerlo de Docker Hub .

Después de ejecutar estas imágenes, puede acceder a la instancia de WebDAV en http://localhost:8888/webdav. Internamente, la carpeta /var/webdavse utiliza como raíz de WebDAV.

Puede ejecutar este contenedor de la siguiente manera:

$ docker run -d -e USERNAME=test -e PASSWORD=test -p 8888:80 morrisjobke/webdav

Re "ejecutar un servicio webdev" : ¿Quiere decir "ejecutar un servicio WebDAV" ? ¿O "ejecutar un servicio de desarrollo web" ?
Peter Mortensen

5

Yo tuve el mismo problema. Ejecuté mi imagen Docker y creó un contenedor con un CONTAINER_ID específico. Quería trabajar con el mismo contenedor:

Primero ejecute su imagen Docker:

docker run -it -p 8888:8888 -p 6006:6006 -v ~/:/host waleedka/modern-deep-learning

Luego, enumere todos los contenedores que ha hecho:

sudo docker ps -a

Y seleccione el contenedor con el que desea trabajar (el mío es 167ddd6d7f15):

sudo docker start -ai 167ddd6d7f15

4

Como ha creado una imagen desde el Dockerfile, la imagen actualmente no está en estado activo. Para trabajar, necesita ejecutar esta imagen dentro de un contenedor.

El $ docker imagescomando describe cuántas imágenes están disponibles actualmente en el repositorio local. y

docker ps -a

muestra cuántos contenedores están disponibles actualmente, es decir, la lista de contenedores activos y salidos.

Hay dos formas de ejecutar la imagen en el contenedor:

$ docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]

En modo separado:

-d=false: Detached mode: Run container in the background, print new container id

En modo interactivo:

-i :Keep STDIN open even if not attached

Aquí está el comando de ejecución Docker

$ docker run image_name:tag_name

Para obtener más aclaraciones sobre la ejecución de Docker, puede visitar la referencia de ejecución de Docker .

Es el mejor material para entender Docker.


2

Para ver una lista de todas las imágenes en su host Docker, ejecute:

  $ docker images
   REPOSITORY          TAG           IMAGE ID            CREATED             SIZE
   apache_snapshot     latest        13037686eac3        22 seconds ago      249MB
   ubuntu              latest        00fd29ccc6f1        3 weeks ago         111MB

Ahora puede ejecutar la imagen de Docker como contenedor en modo interactivo:

   $ docker run -it apache_snapshot /bin/bash

O si no tiene ninguna imagen localmente, busque Docker Hub para obtener una imagen para descargar:

    $ docker search ubuntu
    NAME                            DESCRIPTION             STARS  OFFICIAL  AUTOMATED
    ubuntu                          Ubuntu is a Debian...   6759   [OK]       
    dorowu/ubuntu-desktop-lxde-vnc  Ubuntu with openss...   141              [OK]
    rastasheep/ubuntu-sshd          Dockerized SSH ser...   114              [OK]
    ansible/ubuntu14.04-ansible     Ubuntu 14.04 LTS w...   88               [OK]
    ubuntu-upstart                  Upstart is an even...   80     [OK]

Extraiga la imagen de Docker de un repositorio con el comando de extracción de docker:

     $ docker pull ubuntu

Ejecute la imagen de Docker como contenedor:

     $ docker run -it ubuntu /bin/bash

0
$ docker images
REPOSITORY                TAG                 IMAGE ID            CREATED            
jamesmedice/marketplace   latest              e78c49b5f380        2 days ago          
jamesmedice/marketplace   v1.0.0              *e78c49b5f380*        2 days ago          


$ docker run -p 6001:8585 *e78c49b5f380*

1
Una explicación estaría en orden.
Peter Mortensen

-1

Para aquellos que también tuvieron el mismo problema, pero encontraron un error como

rpc error: code = 2 desc = oci runtime error: exec failed: container_linux.go:247: starting container process caused "exec: \"bash\": executable file not found in $PATH"

Agregué un punto de entrada que me funcionó:

docker run -it --entrypoint /bin/sh para las imágenes sin Bash.

Ejemplo (del ejemplo aprobado):

run -it --entrypoint /bin/sh ubuntu:12.04

Referencia: https://gist.github.com/mitchwongho/11266726

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.