# Obtenez un shell dans un conteneur en cours d'exécution

LLMS index: [llms.txt](/llms.txt)

---

<!-- overview -->

Cette page montre comment utiliser `kubectl exec` pour obtenir un shell dans un conteneur en cours d'exécution.



## Pré-requis


<p>Vous devez disposer d'un cluster Kubernetes et l'outil de ligne de commande kubectl doit être configuré pour communiquer avec votre cluster.
Si vous ne possédez pas déjà de cluster, vous pouvez en créer un en utilisant <a href="/docs/setup/minikube">Minikube</a>, ou vous pouvez utiliser l'un de ces environnements Kubernetes:</p>
<ul>
<li><a href="https://labs.iximiuz.com/playgrounds?category=kubernetes&filter=all">iximiuz Labs</a></li>
<li><a href="https://killercoda.com/playgrounds/scenario/kubernetes">Killercoda</a></li>
<li><a href="https://kodekloud.com/public-playgrounds">KodeKloud</a></li>
</ul>
 
  <p>Pour consulter la version, entrez  <code>kubectl version</code>.</p>




<!-- steps -->

## Obtenir un shell dans un conteneur

Dans cet exercice, vous allez créer un pod contenant un conteneur.
Le conteneur exécute une image nginx.
Voici le fichier de configuration du Pod:


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/fr/examples/application/shell-demo.yaml" download="application/shell-demo.yaml"><code>application/shell-demo.yaml</code>
    </a><img src="/images/copycode.svg" class="icon-copycode" onclick="copyCode('application-shell-demo-yaml')" title="Copy application/shell-demo.yaml to clipboard"></img></div>
    <div class="includecode" id="application-shell-demo-yaml"><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">apiVersion</span><span class="p">:</span><span class="w"> </span><span class="l">v1</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">Pod</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">metadata</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">shell-demo</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="nt">spec</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">volumes</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">shared-data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">emptyDir</span><span class="p">:</span><span class="w"> </span>{}<span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">containers</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">nginx</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">nginx</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">volumeMounts</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">shared-data</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">mountPath</span><span class="p">:</span><span class="w"> </span><span class="l">/usr/share/nginx/html</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">hostNetwork</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">dnsPolicy</span><span class="p">:</span><span class="w"> </span><span class="l">Default</span><span class="w">
</span></span></span></code></pre></div></div>
</div>

Créez le Pod:

```shell
kubectl apply -f https://k8s.io/examples/application/shell-demo.yaml
```

Vérifiez que le conteneur est en cours d'exécution:

```shell
kubectl get pod shell-demo
```

Obtenez un shell pour le conteneur en cours d'exécution:

```shell
kubectl exec -it shell-demo -- /bin/bash
```


<div class="alert alert-info" role="note"><h4 class="alert-heading">Note</h4>Le double tiret &quot;-&quot; est utilisé pour séparer les arguments que vous souhaitez passer à la commande des arguments kubectl.</div>


Dans votre shell, listez le répertoire racine:

```shell
root@shell-demo:/# ls /
```

Dans votre shell, testez d'autres commandes.
Voici quelques exemples:

```shell
root@shell-demo:/# ls /
root@shell-demo:/# cat /proc/mounts
root@shell-demo:/# cat /proc/1/maps
root@shell-demo:/# apt-get update
root@shell-demo:/# apt-get install -y tcpdump
root@shell-demo:/# tcpdump
root@shell-demo:/# apt-get install -y lsof
root@shell-demo:/# lsof
root@shell-demo:/# apt-get install -y procps
root@shell-demo:/# ps aux
root@shell-demo:/# ps aux | grep nginx
```

## Écriture de la page racine de nginx

Regardez à nouveau le fichier de configuration de votre Pod.
Le pod a un volume `emptyDir` et le conteneur monte le volume dans `/usr/share/nginx/html`.

Dans votre shell, créez un fichier `index.html` dans le répertoire `/usr/share/nginx/html`:

```shell
root@shell-demo:/# echo Hello shell demo > /usr/share/nginx/html/index.html
```

Dans votre shell, envoyez une requête GET au serveur nginx:

```shell
root@shell-demo:/# apt-get update
root@shell-demo:/# apt-get install curl
root@shell-demo:/# curl localhost
```

La sortie affiche le texte que vous avez écrit dans le fichier `index.html`:

```shell
Hello shell demo
```

Lorsque vous avez terminé avec votre shell, entrez `exit`.

## Exécution de commandes individuelles dans un conteneur

Dans une fenêtre de commande ordinaire, pas votre shell, répertoriez les variables d'environnement dans le conteneur en cours d'exécution:

```shell
kubectl exec shell-demo -- env
```

Essayez d'exécuter d'autres commandes.
Voici quelques exemples:

```shell
kubectl exec shell-demo ps aux
kubectl exec shell-demo ls /
kubectl exec shell-demo cat /proc/1/mounts
```



<!-- discussion -->

## Ouverture d'un shell lorsqu'un pod possède plusieurs conteneurs

Si un pod a plusieurs conteneurs, utilisez `--container` ou `-c` pour spécifier un conteneur dans la commande `kubectl exec`.
Par exemple, supposons que vous ayez un pod nommé my-pod et que le pod ait deux conteneurs nommés main-app et helper-app.
La commande suivante ouvrirait un shell sur le conteneur de l'application principale.

```shell
kubectl exec -it my-pod --container main-app -- /bin/bash
```



## A suivre


* [kubectl exec](/docs/reference/generated/kubectl/kubectl-commands/#exec)
