Pular para o conteúdo principal

Questão de Sistemas Operacionais — Geral — VUNESP 2023

Sistemas OperacionaisGeral
Código
vu197408
Banca
VUNESP
Órgão
TRF 3
Ano
2023
Cargo
TJ TRF3

O comando do Docker que inicia uma nova sessão interativa do shell sh no container em execução denominado mycontainer é:

  1. Adocker exec mycontainer --workdir /bin/sh
  2. Bdocker run -it mycontainer /bin/sh
  3. Cdocker run mycontainer --workdir /bin/sh
  4. Ddocker exec -it mycontainer /bin/sh
  5. Edocker start -it mycontainer /bin/sh
Revelar gabarito e comentário

GabaritoD — docker exec -it mycontainer /bin/sh

Comentário gerado por IA. É um apoio ao estudo, ancorado em fontes, mas pode conter imprecisões — confira sempre na fonte oficial (lei, súmula, edital e gabarito da banca). Encontrou um erro? Use “Reportar”.

Docker: executando comandos em containers

Gabarito: letra D. Para iniciar uma nova sessão interativa do shell sh em um container já em execução, o comando correto é docker exec -it mycontainer /bin/sh — o docker exec executa um processo em um container existente, e as flags -it (interativo + TTY) são necessárias para abrir o shell interativo. O docker run cria um novo container, e o docker start apenas inicia um container parado, sem executar comandos arbitrários.

O Docker é uma plataforma de virtualização a nível de sistema operacional que empacota aplicações e suas dependências em containers. Para entender a questão, é essencial distinguir os três comandos principais de ciclo de vida:

  • docker run: cria e inicia um novo container a partir de uma imagem. É usado quando você quer um container novo, com um comando específico.

  • docker start: inicia um container que já existe, mas está parado. Ele retoma o processo principal que foi definido na criação, não aceita um comando arbitrário como argumento.

  • docker exec: executa um comando dentro de um container que já está em execução. É a ferramenta certa para "entrar" em um container ativo e rodar comandos adicionais.

A flag -i (interactive) mantém o STDIN aberto, permitindo que você digite comandos; a flag -t (pseudo-TTY) aloca um terminal, dando a aparência de um terminal real. Juntas, -it são indispensáveis para uma sessão interativa de shell. Sem elas, o comando executaria e sairia imediatamente, ou não teria um terminal para interação.

A pegadinha da banca está em trocar exec por run ou start. O enunciado diz explicitamente "container em execução" — isso elimina run (que cria um novo) e start (que inicia um parado). Além disso, a opção A usa --workdir de forma incorreta: essa flag define o diretório de trabalho, mas não é o que abre um shell interativo; e a opção C mistura run com --workdir, também errado.

Guarde a regra de ouro: container em execução → docker exec; container novo → docker run; container parado → docker start. É exatamente essa distinção que separa as alternativas.

  1. 1Novo containerdocker run
  2. 2Container paradodocker start
  3. 3Container em execuçãodocker exec
LEVEL · soulevel.com.br

Alternativa A — ❌ Incorreta

docker exec mycontainer --workdir /bin/sh — O docker exec é o comando certo para um container em execução, mas a flag --workdir define o diretório de trabalho, não o comando a ser executado. A sintaxe correta é docker exec [opções] CONTAINER COMANDO [ARG...]. Aqui, --workdir /bin/sh seria interpretado como uma flag que espera um diretório, e /bin/sh seria o diretório, não o shell. Além disso, faltam as flags -it para interatividade.

Alternativa B — ❌ Incorreta

docker run -it mycontainer /bin/sh — O docker run cria um novo container a partir de uma imagem. O enunciado fala de um container já em execução chamado mycontainer. Usar run com o nome de um container existente causaria erro, pois run espera o nome de uma imagem, não de um container. A sintaxe correta seria docker run -it imagem /bin/sh para criar um novo container interativo.

Alternativa C — ❌ Incorreta

docker run mycontainer --workdir /bin/sh — Mesmo erro da alternativa B: run cria um novo container, não executa em um existente. Além disso, --workdir está mal utilizado (como na A) e faltam as flags -it.

Alternativa D — ✅ Correta ⟵ GABARITO

docker exec -it mycontainer /bin/sh — Esta é a sintaxe correta: docker exec executa um comando em um container em execução; -it garante modo interativo com terminal; mycontainer é o nome do container; /bin/sh é o shell a ser iniciado. Exatamente o que o enunciado pede.

Alternativa E — ❌ Incorreta

docker start -it mycontainer /bin/sh — O docker start inicia um container parado, retomando seu processo principal. Ele não aceita um comando arbitrário como argumento — a sintaxe é docker start [OPÇÕES] CONTAINER [CONTAINER...]. Além disso, -it não é uma flag válida para start (que usa -a para anexar e -i para interativo, mas não -t). O comando correto para abrir um shell em um container parado seria docker start -ai mycontainer (que anexa ao processo principal), mas não para executar /bin/sh.

NÃO CAIA NESSA!

A banca explora a confusão entre run, start e exec. O enunciado diz "container em execução" — isso já elimina run (cria novo) e start (inicia parado). O candidato que decora apenas docker run -it acaba marcando a B, mas ela está errada porque run não se aplica a um container existente. Lembre-se: em execução → exec.

PEGA ESSA DICA!

Para fixar, monte um quadro mental: run = criar + iniciar; start = iniciar parado; exec = executar dentro de um ativo. E nunca esqueça do par -it para sessões interativas. Em provas, sublinhe a palavra "em execução" — ela é a chave.

Gabarito: letra D

Link permanente: /questoes/vu197408