Tous les produits
Search
Centre de documentation

Elastic Compute Service:Exécuter des commandes dans des conteneurs

Dernière mise à jour :Aug 18, 2026

Cloud Assistant vous permet d'exécuter des commandes directement dans des conteneurs Kubernetes sur des instances ECS Linux, sans avoir à vous connecter aux instances ni à utiliser des serveurs de rebond. Spécifiez ContainerId ou ContainerName lors de l'appel de RunCommand ou InvokeCommand.

Prérequis

  • Les instances sont à l'état Running.

  • Cloud Assistant Agent version 2.2.3.344 ou ultérieure est installé sur les instances.

    Consultez la rubrique Installer Cloud Assistant Agent.

Limites

  • Cloud Assistant prend uniquement en charge les conteneurs Kubernetes gérés par CRI s'exécutant sur Docker, containerd ou CRI-O.

  • Lorsque vous exécutez des commandes dans des conteneurs, CRI impose les limites suivantes.

    Limite

    Solution de contournement

    Seul l'utilisateur par défaut du conteneur peut exécuter des commandes.

    • Lorsque ContainerId ou ContainerName est spécifié, le paramètre Username est ignoré. Les commandes s'exécutent en tant qu'utilisateur par défaut du conteneur.

    • Pour changer d'utilisateur, exécutez sudo dans le conteneur. Assurez-vous que l'image du conteneur prend en charge le changement d'utilisateur.

    Les commandes s'exécutent uniquement dans le répertoire de travail par défaut.

    • Lorsque ContainerId ou ContainerName est spécifié, le paramètre WorkingDir est ignoré.

    • Pour modifier le répertoire de travail, ajoutez une commande cd au début du script.

    Seuls les scripts shell sont pris en charge. Les lignes shebang telles que #!/usr/bin/python ne sont pas reconnues.

    • Lorsque ContainerId ou ContainerName est spécifié, les scripts s'exécutent avec /bin/sh dans le conteneur. La directive shebang #! est ignorée.

    • Pour exécuter un script non shell, appelez directement l'interpréteur. Par exemple, ajoutez /usr/bin/python -c 'import sys; print(sys.version_info)' pour appeler l'interpréteur Python.

Procédure

  1. Obtenez l'ID et le nom d'un conteneur Kubernetes.

    Méthode 1 : Utiliser kubectl pour obtenir l'ID et le nom du conteneur

    Exécutez kubectl --namespace <Specified namespace> describe pod <Specified pod> pour afficher l'ContainerId d'un conteneur, ou interrogez le Kubernetes apiserver pour obtenir l'ID et le nom du conteneur.

    1. Connectez-vous à l'instance.

      Consultez la rubrique Se connecter à une instance Linux à l'aide d'un mot de passe ou d'une clé.

    2. Interrogez l'ID du conteneur :

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

      Dans cet exemple, le namespace est kube-system et le pod est kube-proxy-h4slq. Exemple de sortie :

      [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)

      Dans la section Containers, l'Container ID du conteneur kube-proxy est docker://fe17ab0409739e63f526aed7c79e87989e90d19f0429********************. Cela indique un runtime Docker avec l'ID de conteneur fe17ab0409739e63f526aed7c79e87989e90d19f0429********************. Le nom du conteneur géré par CRI est kube-proxy.

    3. (Facultatif) Affichez les types et versions des runtimes de conteneurs sur chaque nœud :

      kubectl get nodes -o wide

      Exemple de sortie :

      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 colonne CONTAINER-RUNTIME affiche le runtime de conteneurs sur chaque nœud.

    Méthode 2 : Utiliser **Cloud Assistant Agent** pour obtenir l'ID et le nom du conteneur

    Cloud Assistant Agent sur les instances Linux peut répertorier les conteneurs Kubernetes gérés par CRI s'exécutant sur Docker, containerd ou CRI-O, sans nécessiter kubectl.

    La sous-commande list-containers répertorie les conteneurs sur les instances. Exemples :

    • Exécutez aliyun-service list-containers --source cri.

      Le paramètre --source cri répertorie uniquement les conteneurs en cours d'exécution gérés par CRI. Exemple de sortie :

      [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

      Utilisez les valeurs Container Id et Container Name pour les paramètres ContainerId et ContainerName. La colonne Pod Name affiche les pods Kubernetes correspondants.

    • Exécutez aliyun-service list-containers --source cri --all.

      Le paramètre --all inclut les conteneurs dans tous les états (y compris ceux qui sont arrêtés). Exemple de sortie :

      [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
    • Exécutez aliyun-service list-containers.

      Sans --source, la commande répertorie à la fois les conteneurs gérés par CRI et les conteneurs Docker non gérés par CRI. Exemple de sortie :

      Important

      Les commandes ne peuvent être exécutées que dans des conteneurs gérés par CRI. Les conteneurs Docker non gérés par CRI ne sont pas pris en charge.

      [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

      Valeurs de la colonne Data Source :

      • CRI : Conteneurs Kubernetes gérés par CRI.

      • docker : Conteneurs Docker non gérés par CRI.

    • Exécutez aliyun-service list-containers --source cri --json.

      Le paramètre --json génère les informations sur les conteneurs au format JSON. Vous pouvez utiliser Cloud Assistant pour interroger et analyser les données des conteneurs afin d'automatiser les opérations et la maintenance.

      [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. Exécutez des commandes dans des conteneurs avec Cloud Assistant.

    Vous ne pouvez exécuter des commandes dans des conteneurs spécifiques qu'en appelant des opérations API. Lors de l'appel de RunCommand ou de InvokeCommand, spécifiez ContainerId, ContainerName ou les deux.

    Remarque

    Pour connaître les limites des commandes Cloud Assistant, consultez les sections « Prérequis » et « Informations générales » de la rubrique Utiliser la fonctionnalité d'exécution immédiate.

Résultat

Appelez DescribeInvocations ou DescribeInvocationResults pour interroger l'état d'exécution ou les résultats. La réponse inclut les valeurs ContainerId et ContainerName.