SISTEMAS

¿Cómo ejecutar un comando en un contenedor Docker?

Ejecutar comandos en un contenedor docker es más fácil de lo que piensa.

Un contenedor docker es un entorno aislado que normalmente contiene una sola aplicación con todas las dependencias requeridas. Muchas veces, necesitamos ejecutar algunos comandos en un contenedor docker. Hay varias formas en que podemos ejecutar un comando dentro del contenedor y obtener el resultado deseado.

Veamos cómo podemos hacer esto.

Usa la consola interactiva

Podemos acceder directamente al shell del contenedor y ejecutar nuestros comandos como una terminal normal de Linux. Para obtener un shell interactivo de un contenedor detenido (que no se está ejecutando), puede usar:

$ docker run -it ubuntu bash
[email protected]:/#

Como puede ver, aterrizamos directamente en un nuevo Ubuntu Un contenedor en el que podemos ejecutar comandos.Si el contenedor ya se está ejecutando, puede usar exec El comando es el siguiente.

Primero, averigüemos el ID del contenedor.

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                      NAMES
c2d969adde7a   nginx     "/docker-entrypoint.…"   2 hours ago   Up 2 hours   127.0.0.1:80->80/tcp       nginx
0960560bc24b   mariadb   "docker-entrypoint.s…"   2 hours ago   Up 2 hours   127.0.0.1:3306->3306/tcp   mariadb

Luego vaya a la identificación del contenedor c2d969adde7a

$ docker exec -it c2d969adde7a bash 
[email protected]:/#

En el resultado anterior, puede observar que comenzamos un bash sesión nginx Un contenedor en un estado de ejecución. Aquí podemos ejecutar cualquier comando compatible y obtener el resultado.

notas – Su contenedor probablemente no tenga bash, si lo tiene, puede usar sh.

predecesor:

docker exec -it c2d969adde7a sh

salida directa

A menudo, solo necesitamos la salida de uno o dos comandos y no una sesión interactiva completa para nuestra tarea.Puede ejecutar el comando deseado dentro del contenedor y obtener su salida directamente sin abrir una nueva sesión de shell con exec orden no -it bandera. Su sintaxis es:

$ docker exec  

Aquí hay un ejemplo:

$ docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED       STATUS       PORTS                      NAMES
c2d969adde7a   nginx     "/docker-entrypoint.…"   2 hours ago   Up 2 hours   127.0.0.1:80->80/tcp       nginx
0960560bc24b   mariadb   "docker-entrypoint.s…"   2 hours ago   Up 2 hours   127.0.0.1:3306->3306/tcp   mariadb

$ docker exec 0960560bc24b ps -ef | grep mysql
mysql          1       0  0 13:35 ?        00:00:02 mysqld
$

implementamos ps -ef | grep mysql Ejecute comandos en un contenedor MariaDB en ejecución y obtenga el resultado directamente.

método de archivo acoplable

Esta no es la forma exacta en que puede ejecutar comandos en un contenedor docker, aunque podría ayudar en situaciones de desarrollo o depuración de implementación inicial, etc.nosotros podemos usar RUN Comandos en el Dockerfile. Aquí está nuestro Dockerfile de ejemplo:

FROM nginx:latest
RUN nginx -V

simplemente saca lo último nginx imagen del registro, luego ejecute nginx -V Comando para mostrar la versión de Nginx al construir una imagen.

$ docker build -t nginx-test .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM nginx:latest
 ---> 7ce4f91ef623
Step 2/2 : RUN nginx -V
 ---> Running in 43918bbbeaa5
nginx version: nginx/1.19.9
built by gcc 8.3.0 (Debian 8.3.0-6)
built with OpenSSL 1.1.1d  10 Sep 2019
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-g -O2 -fdebug-prefix-map=/data/builder/debuild/nginx-1.19.9/debian/debuild-base/nginx-1.19.9=. -fstack-protector-strong -Wformat -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -Wl,--as-needed -pie'
Removing intermediate container 43918bbbeaa5
 ---> d682277f2e50
Successfully built d682277f2e50
Successfully tagged nginx-test:latest
$

Observar la salida RUN El comando en el fragmento de código anterior.El fragmento anterior solo aparecerá en la primera compilación, las compilaciones consecutivas no se repetirán RUN salida de comando.Como solución puedes probar --no-cache bandera:

$ docker build -t nginx-test . --no-cache

El último método no es el mejor, pero a veces ayuda con la depuración, etc.

generalizar

Ejecutar comandos en un contenedor docker es simple y hay varias formas de hacerlo. Esta es una tarea normal para los administradores de Docker, por lo que es útil conocer estos comandos.

A continuación, aprenda algunos comandos populares de Docker.

Artículo Recomendado:  Una guía para comprar una nueva carcasa para PC

Publicaciones relacionadas

Deja una respuesta

Tu dirección de correo electrónico no será publicada.