Todos los productos
Search
Centro de documentos

Elastic Compute Service:Run commands in containers

Última actualización: Sep 02, 2026

Cloud Assistant le permite ejecutar comandos directamente en contenedores de Kubernetes sobre instancias ECS con Linux, sin necesidad de iniciar sesión en las instancias ni utilizar servidores de salto. Especifique ContainerId o ContainerName al invocar RunCommand o InvokeCommand.

Requisitos previos

  • Las instancias se encuentran en estado Running.

  • Cloud Assistant Agent 2.2.3.344 o posterior está instalado en las instancias.

    Consulte Install Cloud Assistant Agent.

Límites

  • Cloud Assistant solo admite contenedores de Kubernetes gestionados por CRI que se ejecutan en Docker, containerd o CRI-O.

  • El CRI impone los siguientes límites al ejecutar comandos en contenedores.

    Límite

    Solución alternativa

    Solo el usuario predeterminado del contenedor puede ejecutar comandos.

    • Cuando se especifica ContainerId o ContainerName, se ignora el parámetro Username. Los comandos se ejecutan como el usuario predeterminado del contenedor.

    • Para cambiar de usuario, ejecute sudo dentro del contenedor. Asegúrese de que la imagen del contenedor admita el cambio de usuario.

    Los comandos solo se ejecutan en el directorio de trabajo predeterminado.

    • Cuando se especifica ContainerId o ContainerName, se ignora el parámetro WorkingDir.

    • Para cambiar el directorio de trabajo, agregue un comando cd al inicio del script.

    Solo se admiten scripts de shell. No se reconocen las líneas shebang como #!/usr/bin/python.

    • Cuando se especifica ContainerId o ContainerName, los scripts se ejecutan con /bin/sh en el contenedor. Se ignora la directiva shebang #!.

    • Para ejecutar un script que no sea de shell, invoque directamente el intérprete. Por ejemplo, agregue /usr/bin/python -c 'import sys; print(sys.version_info)' para llamar al intérprete de Python.

Procedimiento

  1. Obtenga el ID y el nombre de un contenedor de Kubernetes.

    Método 1: Usar kubectl para obtener el ID y el nombre del contenedor

    Ejecute kubectl --namespace <Specified namespace> describe pod <Specified pod> para consultar el ContainerId de un contenedor, o bien consulte el Kubernetes apiserver para obtener el ID y el nombre del contenedor.

    1. Conéctese a la instancia.

      Consulte Connect to a Linux instance by using a password or key.

    2. Consulte el ID del contenedor:

      kubectl --namespace <Specified namespace> describe pod <Specified pod>

      En este ejemplo, el namespace es kube-system y el pod es kube-proxy-h4slq. Salida de ejemplo:

      [test@localhost ~]# kubectl --namespace kube-system describe pod kube-proxy-h4slq
      Name:                 kube-proxy-h4slq
      Namespace:            kube-system
      Priority:             2000001000
      Priority Class Name:  system-node-critical
      Node:                 master1/192.168.1.11
      Start Time:           Thu, 11 Aug 2022 16:33:04 +0800
      Labels:               controller-revision-hash=9c5d7****
                            k8s-app=kube-proxy
                            pod-template-generation=1
      Annotations:          <none>
      Status:               Running
      IP:                   192.168.1.11
      IPs:
        IP:           192.168.1.11
      Controlled By:  DaemonSet/kube-proxy
      Containers:
        kube-proxy:
          Container ID:  docker://fe17ab0409739e63f526aed7c79e87989e90d19f0429********************
          Image:         k8s.gcr.io/kube-proxy:v1.23.9
          Image ID:      docker://sha256:9e6a540eeeb62a64450dad488760cc3769b23d19fc21********************
          Port:          <none>
          Host Port:     <none>
          Command:
            /usr/local/bin/kube-proxy
            --config=/var/lib/kube-proxy/config.conf
            --hostname-override=$(NODE_NAME)
          State:          Running
            Started:      Thu, 11 Aug 2022 16:33:06 +0800
          Ready:          True
          Restart Count:  0
          Environment:
            NODE_NAME:   (v1:spec.nodeName)
          Mounts:
            /lib/modules from lib-modules (ro)
            /run/xtables.lock from xtables-lock (rw)
            /var/lib/kube-proxy from kube-proxy (rw)
            /var/run/secrets/kubernetes.io/serviceaccount from kube-api-access-69g97 (ro)

      En la sección Containers, el Container ID del contenedor kube-proxy es docker://fe17ab0409739e63f526aed7c79e87989e90d19f0429********************. Esto indica un entorno de ejecución Docker con el ID de contenedor fe17ab0409739e63f526aed7c79e87989e90d19f0429********************. El nombre del contenedor gestionado por CRI es kube-proxy.

    3. (Opcional) Consulte los tipos y versiones del entorno de ejecución de contenedores en cada nodo:

      kubectl get nodes -o wide

      Salida de ejemplo:

      NAME    STATUS     ROLES                  AGE   VERSION   INTERNAL-IP     EXTERNAL-IP   OS-IMAGE                         KERNEL-VERSION                 CONTAINER-RUNTIME
      node1   Ready      <none>                 17h   v1.23.6   192.168.1.101   <none>        Ubuntu 20.04.4 LTS               5.4.0-123-generic              containerd://1.6.7
      node2   Ready      <none>                 17h   v1.23.6   192.168.1.102   <none>        openSUSE Leap 15.4               5.14.21-150400.24.11-default   cri-o://1.22.0
      master1 Ready      control-plane,master   18h   v1.23.6   192.168.1.11    <none>        CentOS Linux 7 (Core)            3.10.0-1160.71.1.el7.x86_64    docker://20.10.17
      node3   Ready      <none>                 17h   v1.23.6   192.168.1.103   <none>        Debian GNU/Linux 11 (bullseye)   5.10.0-16-amd64                docker://20.10.17

      La columna CONTAINER-RUNTIME muestra el entorno de ejecución de contenedores en cada nodo.

    Método 2: Usar **Cloud Assistant Agent** para obtener el ID y el nombre del contenedor

    Cloud Assistant Agent en instancias Linux puede listar contenedores de Kubernetes gestionados por CRI que se ejecutan en Docker, containerd o CRI-O sin necesidad de usar kubectl.

    El subcomando list-containers lista los contenedores en las instancias. Ejemplos:

    • Ejecute aliyun-service list-containers --source cri.

      El parámetro --source cri lista únicamente los contenedores en ejecución gestionados por CRI. Salida de ejemplo:

      [test@localhost ~]# aliyun-service list-containers --source cri
      Container Id                                                      Container Name           Pod Name                                         Runtime  State    Data Source
      4f14883f30580007b2b386be16c743048d7b7b6a6522********************  etcd                     etcd-izbp199sm5j54**********                     docker   RUNNING  CRI
      60775315aa50765de7332764322f7697ded2783e4860********************  kube-apiserver           kube-apiserver-izbp199sm5j54**********           docker   RUNNING  CRI
      8d8dd01f09f451109285a0094eef0c144bdfdef6913e********************  coredns                  coredns-64897**********                          docker   RUNNING  CRI
      aee068814a7b10419186bb944832e65df2a8b3cab32b********************  kube-scheduler           kube-scheduler-izbp199sm5j54**********           docker   RUNNING  CRI
      b06609d4246be717c324b366d4e6c392fcf226ecbc4b********************  kube-flannel             kube-flanne**********                            docker   RUNNING  CRI
      c0992c3401ad52b3fce105ce5188026f28db7d5fe202********************  kube-controller-manager  kube-controller-manager-izbp199sm5j54**********  docker   RUNNING  CRI
      d1add169bb596f53d31030f84d69e494e7b23135acd2********************  coredns                  coredns-64897**********                          docker   RUNNING  CRI
      fe17ab0409739e63f526aed7c79e87989e90d19f0429********************  kube-proxy               kube-proxy-*****                                 docker   RUNNING  CRI

      Utilice los valores de Container Id y Container Name para los parámetros ContainerId y ContainerName. La columna Pod Name muestra los pods de Kubernetes correspondientes.

    • Ejecute aliyun-service list-containers --source cri --all.

      El parámetro --all incluye contenedores en todos los estados (incluidos los finalizados). Salida de ejemplo:

      [test@localhost ~]# aliyun-service list-containers --source cri --all
      Container Id                                                      Container Name           Pod Name                                         Runtime  State    Data Source
      240246ecbb7b4bfc3e0fd1bad51a76d43603c9cdee6a********************  install-cni              kube-flannel-ds-*****                            docker   EXITED   CRI
      4f14883f30580007b2b386be16c743048d7b7b6a6522********************  etcd                     etcd-izbp199sm5j************                     docker   RUNNING  CRI
      60775315aa50765de7332764322f7697ded2783e4860********************  kube-apiserver           kube-apiserver-izbp199sm5j************           docker   RUNNING  CRI
      8d8dd01f09f451109285a0094eef0c144bdfdef6913e********************  coredns                  coredns-64897985d-8qz25                          docker   RUNNING  CRI
      aee068814a7b10419186bb944832e65df2a8b3cab32b********************  kube-scheduler           kube-scheduler-izbp199sm5j************           docker   RUNNING  CRI
      b06609d4246be717c324b366d4e6c392fcf226ecbc4b********************  kube-flannel             kube-flannel-ds-*****                            docker   RUNNING  CRI
      bdf9a2aff47a6858897d5c734c481535f7bb70321c8b********************  install-cni-plugin       kube-flannel-ds-*****                            docker   EXITED   CRI
      c0992c3401ad52b3fce105ce5188026f28db7d5fe202********************  kube-controller-manager  kube-controller-manager-izbp199sm53************  docker   RUNNING  CRI
      d1add169bb596f53d31030f84d69e494e7b23135acd2********************  coredns                  coredns-***************                          docker   RUNNING  CRI
      fe17ab0409739e63f526aed7c79e87989e90d19f0429********************  kube-proxy               kube-proxy-*****                                 docker   RUNNING  CRI
    • Ejecute aliyun-service list-containers.

      Sin --source, el comando lista tanto los contenedores gestionados por CRI como los contenedores Docker no gestionados por CRI. Salida de ejemplo:

      Importante

      Los comandos solo pueden ejecutarse en contenedores gestionados por CRI. Los contenedores Docker no gestionados por CRI no son compatibles.

      [test@localhost ~]# aliyun-service list-containers
      Container Id                                                      Container Name                                                                                          Pod Name                                         Runtime  State    Data Source
      4f14883f30580007b2b386be16c743048d7b7b6a6522********************  etcd                                                                                                    etcd-izbp199sm5j************                     docker   RUNNING  CRI
      60775315aa50765de7332764322f7697ded2783e4860********************  kube-apiserver                                                                                          kube-apiserver-izbp199sm5j************           docker   RUNNING  CRI
      8d8dd01f09f451109285a0094eef0c144bdfdef6913e********************  coredns                                                                                                 coredns-648************                          docker   RUNNING  CRI
      aee068814a7b10419186bb944832e65df2a8b3cab32b********************  kube-scheduler                                                                                          kube-scheduler-izbp199sm5j************           docker   RUNNING  CRI
      b06609d4246be717c324b366d4e6c392fcf226ecbc4b********************  kube-flannel                                                                                            kube-flannel-********                            docker   RUNNING  CRI
      c0992c3401ad52b3fce105ce5188026f28db7d5fe202********************  kube-controller-manager                                                                                 kube-controller-manager-izbp199sm5j************  docker   RUNNING  CRI
      d1add169bb596f53d31030f84d69e494e7b23135acd2********************  coredns                                                                                                 coredns-648************                          docker   RUNNING  CRI
      fe17ab0409739e63f526aed7c79e87989e90d19f0429********************  kube-proxy                                                                                              kube-proxy-*****                                 docker   RUNNING  CRI
      b6864279148b3cef6e72c983f7ffa041dfe7ab5e2c57********************  k8s_POD_coredns-64897985d-8qz25_kube-system_5422418e******************************                                                                       docker   RUNNING  docker
      fa99eaa067927e47f4e30795ad45065383efc8669687********************  k8s_POD_coredns-64897985d-cxvdq_kube-system_f59766f0******************************                                                                       docker   RUNNING  docker
      3236c0f21b4a8f15fadeaaf813afb21d59889163056c********************  k8s_POD_kube-flannel-ds-qwf9p_kube-flannel_66c0205*******************************                                                                        docker   RUNNING  docker
      016bd6794042da8d4eb3b8f5f90594bad104b360670d********************  k8s_POD_kube-proxy-h4slq_kube-system_e2ce593*******************************                                                                              docker   RUNNING  docker
      ae30393668288624472d1a594be2cb45996798d6b750********************  k8s_POD_kube-scheduler-izbp199sm5j54yl36as4h9z_kube-system_f77f******************************                                                            docker   RUNNING  docker
      c2ced280d972f54aab32fda8de1f74f8799237cc51e2********************  k8s_POD_kube-controller-manager-izbp199sm5j54yl36as4h9z_kube-system_5c6*******************************                                                   docker   RUNNING  docker
      c92bce6b84d133b807d0310d215423870101d730ede2********************  k8s_POD_kube-apiserver-izbp199sm5j54yl36as4h9z_kube-system_7f6f******************************                                                            docker   RUNNING  docker
      4a5fe93977ad8eb945889cffe29f9d99d1540e870e69********************  k8s_POD_etcd-izbp199sm5j54yl36as4h9z_kube-system_4a85******************************                                                                      docker   RUNNING  docker
      a87c87c7dc162e99749cb78f8f270765e90f3df921d2********************  modest_bose                                                                                                                                              docker   RUNNING  docker

      Valores de la columna Data Source:

      • CRI: Contenedores de Kubernetes gestionados por CRI.

      • docker: Contenedores Docker no gestionados por CRI.

    • Ejecute aliyun-service list-containers --source cri --json.

      El parámetro --json genera la información de los contenedores en formato JSON. Puede usar Cloud Assistant para consultar y analizar los datos de los contenedores con fines de automatización de operaciones y mantenimiento.

      [test@localhost ~]# aliyun-service list-containers --source cri --json
      [{"id":"4f14883f30580007b2b386be16c743048d7b7b6a6522********************","name":"etcd","podId":"4a5fe93977ad8eb945889cffe29f9d99d1540e870e6*********************","podName":"etcd-izbp199sm5j54**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"60775315aa50765de7332764322f7697ded2783e4860********************","name":"kube-apiserver","podId":"c92bce6b84d133b807d0310d215423870101d730ede2********************","podName":"kube-apiserver-izbp199sm5j54**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"8d8dd01f09f451109285a0094eef0c144bdfdef6913e********************","name":"coredns","podId":"b6864279148b3cef6e72c983f7ffa041dfe7ab5e2c57********************","podName":"coredns-64897**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"aee068814a7b10419186bb944832e65df2a8b3cab32b********************","name":"kube-scheduler","podId":"ae30393668288624472d1a594be2cb45996798d6b750********************","podName":"kube-scheduler-izbp199sm5j54**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"b06609d4246be717c324b366d4e6c392fcf226ecbc4b********************","name":"kube-flannel","podId":"3236c0f21b4a8f15fadeaaf813afb21d59889163056c********************","podName":"kube-flannel-ds-*****","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"c0992c3401ad52b3fce105ce5188026f28db7d5fe202********************","name":"kube-controller-manager","podId":"c2ced280d972f54aab32fda8de1f74f8799237cc51e2********************","podName":"kube-controller-manager-izbp199sm5j54**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"d1add169bb596f53d31030f84d69e494e7b23135acd2********************","name":"coredns","podId":"fa99eaa067927e47f4e30795ad45065383efc8669687********************","podName":"coredns-64897**********","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"},{"id":"fe17ab0409739e63f526aed7c79e87989e90d19f0429********************","name":"kube-proxy","podId":"016bd6794042da8d4eb3b8f5f90594bad104b360670d********************","podName":"kube-proxy-*****","runtimeName":"docker","state":"RUNNING","dataSource":"CRI"}]
  2. Ejecute comandos en contenedores con Cloud Assistant.

    Solo puede ejecutar comandos en contenedores específicos mediante llamadas a operaciones de API. Al invocar RunCommand o InvokeCommand, especifique ContainerId, ContainerName o ambos.

    Nota

    Para conocer los límites de los comandos de Cloud Assistant, consulte las secciones "Requisitos previos" y "Contexto" en Use the immediate execution feature.

Resultado

Invoque DescribeInvocations o DescribeInvocationResults para consultar el estado o los resultados de la ejecución. La respuesta incluye los valores de ContainerId y ContainerName.