# Obter um Shell em um Contêiner em Execução

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

---

<!-- overview -->

Esta página mostra como usar `kubectl exec` para obter um shell em um contêiner em execução.




## Antes de você começar


<p>Você precisa ter um cluster do Kubernetes e a ferramenta de linha de comando kubectl deve estar configurada para se comunicar com seu cluster. É recomendado executar esse tutorial em um cluster com pelo menos dois nós que não estejam atuando como hosts de camada de gerenciamento. Se você ainda não possui um cluster, pode criar um usando o <a href="/pt-br/docs/tasks/tools/#minikube">minikube</a> ou pode usar um dos seguintes ambientes:</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>





<!-- steps -->

## Obtendo um Shell em um Contêiner

Neste exercício, você cria um Pod que possui um contêiner. O contêiner
executa a imagem do nginx. Aqui está o arquivo de configuração para o Pod:


















<div class="highlight code-sample">
    <div class="copy-code-icon">
    <a href="https://raw.githubusercontent.com/kubernetes/website/main/content/pt-br/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="Copiar application/shell-demo.yaml para a área de transferência"></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>

Crie o Pod:

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

Verifique se o contêiner está em execução:

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

Obtenha um shell no contêiner em execução:

```shell
kubectl exec --stdin --tty shell-demo -- /bin/bash
```


<div class="alert alert-info" role="note"><h4 class="alert-heading">Nota</h4>O duplo traço (<code>--</code>) separa os argumentos que você deseja passar para o comando dos argumentos do <code>kubectl</code>.</div>


No seu shell, liste o diretório raiz:

```shell
# Execute isso dentro do contêiner
ls /
```

No seu shell, experimente outros comandos. Aqui estão alguns exemplos:

```shell
# Você pode executar esses comandos de exemplo dentro do contêiner
ls /
cat /proc/mounts
cat /proc/1/maps
apt-get update
apt-get install -y tcpdump
tcpdump
apt-get install -y lsof
lsof
apt-get install -y procps
ps aux
ps aux | grep nginx
```

## Escrevendo a página raiz para o nginx

Veja novamente o arquivo de configuração do seu Pod. O Pod
possui um volume `emptyDir`, e o contêiner monta esse volume
em `/usr/share/nginx/html`.

No seu shell, crie um arquivo `index.html` no diretório `/usr/share/nginx/html`:

```shell
# Execute isso dentro do contêiner
echo 'Hello shell demo' > /usr/share/nginx/html/index.html
```

No seu shell, envie uma solicitação GET para o servidor nginx:

```shell
# Execute isso no shell dentro do seu contêiner
apt-get update
apt-get install curl
curl http://localhost/
```

A saída exibe o texto que você escreveu no arquivo `index.html`:

```
Hello shell demo
```

Quando terminar de usar o shell, digite `exit`.

```shell
exit # Para sair do shell no contêiner
```

## Executando comandos individuais em um contêiner

Em uma janela de comando comum, fora do seu shell, liste as variáveis de ambiente no contêiner em execução:

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

Experimente executar outros comandos. Aqui estão alguns exemplos:

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



<!-- discussion -->

## Abrindo um shell quando um Pod tem mais de um contêiner

Se um Pod tiver mais de um contêiner, use `--container` ou `-c` para
especificar um contêiner no comando `kubectl exec`. Por exemplo,
suponha que você tenha um Pod chamado `my-pod`, e esse Pod tenha dois contêineres
chamados _main-app_ e _helper-app_. O seguinte comando abriria um
shell no contêiner _main-app_.

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


<div class="alert alert-info" role="note"><h4 class="alert-heading">Nota</h4>As opções curtas <code>-i</code> e <code>-t</code> são equivalentes às opções longas <code>--stdin</code> e <code>--tty</code></div>



## Próximos passos


* Leia mais sobre [`kubectl exec`](/docs/reference/generated/kubectl/kubectl-commands/#exec)
