Questão de Sistemas Operacionais — Geral — VUNESP 2023
Sistemas Operacionais›Geral
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 é:
Adocker exec mycontainer --workdir /bin/sh
Bdocker run -it mycontainer /bin/sh
Cdocker run mycontainer --workdir /bin/sh
Ddocker exec -it mycontainer /bin/sh
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.
1Novo containerdocker run
2Container paradodocker start
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 runcria 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.