Na prática, para iniciar um contêiner, eu faço:
docker run a8asd8f9asdf0
Se for esse o caso, o que faz:
docker start
Faz?
No manual diz
Iniciar um ou mais contêineres parados
execute
?
Na prática, para iniciar um contêiner, eu faço:
docker run a8asd8f9asdf0
Se for esse o caso, o que faz:
docker start
Faz?
No manual diz
Iniciar um ou mais contêineres parados
execute
?
Respostas:
Esta é uma pergunta muito importante e a resposta é muito simples, mas fundamental:
docker run IMAGE_ID
e não docker run CONTAINER_ID
docker stop CONTAINER_ID
, é possível reiniciar o mesmo contêiner com o comando docker start CONTAINER_ID
e os dados e configurações serão os mesmos.docker rm container_id
). Por outro lado, os dados de volumes sobrevivem à remoção do contêiner, a menos que a -v
opção seja explicitamente fornecida na linha de comando. O local do volume no sistema host pode ser inspecionado diretamente. Veja este artigo
&
no final da run
linha de comando? Eu preciso dele como um serviço countinous (24 horas)
run
executa uma imagemstart
inicia um contêiner .O docker run
documento menciona:
O
docker run
comando primeiro cria uma camada de contêiner gravável sobre a imagem especificada e, em seguida, inicia -a usando o comando especificado.Ou seja, a execução do docker é equivalente à API
/containers/create
então/containers/(id)/start
.
Você não executa um contêiner existente, executa o docker nele (desde o docker 1.3) .
Você pode reiniciar um contêiner encerrado .
-i
a docker run
para um processo interativo? Quero dizer, o docker run precisa de uma imagem para executar um contêiner.
Explicação com um exemplo:
Considere que você possui uma imagem de jogo (iso) no seu computador.
Quando você run
(monta sua imagem como uma unidade virtual), uma unidade virtual é criada com todo o conteúdo do jogo na unidade virtual e o arquivo de instalação do jogo é iniciado automaticamente. [Executando sua imagem do Docker - criando um contêiner e iniciando-o.]
Mas quando você stop
(semelhante ao docker para), a unidade virtual ainda existe, mas interrompe todos os processos. [Como o contêiner existe até que não seja excluído]
E quando você faz start
(semelhante ao docker start), a partir da unidade virtual, os arquivos dos jogos iniciam sua execução. [iniciando o contêiner existente]
Neste exemplo - A imagem do jogo é sua imagem do Docker e a unidade virtual é seu contêiner.
A resposta de daniele3004 já é muito boa.
Apenas uma rápida e suja fórmula para pessoas como eu que se mistura run
e start
de vez em quando:
docker run [...]
= docker pull [...]
+docker start [...]
"...docker run is equivalent to the API /containers/create then /containers/(id)/start.
(fonte: docs.docker.com/engine/reference/commandline/run )
run
O comando cria um contêiner a partir da imagem e inicia o processo raiz nesse contêiner. Executá-lo com run --rm
bandeira iria salvar-lhe a dificuldade de remover o recipiente morto inútil depois e lhe permitiria ignorar a existência de docker start
e docker remove
completamente.
run
O comando faz algumas coisas diferentes:
docker run --name dname image_name bash -c "whoami"
docker ps
bash -c "whoami"
. Se alguém correrdocker run --name dname image_name
sem um comando para executar o contêiner, entrará no estado parado imediatamente.docker remove
antes de iniciar o contêiner com o mesmo nome.Como remover o recipiente depois que ele é parado automaticamente? Adicione um--rm
sinalizador aorun
comando:
docker run --rm --name dname image_name bash -c "whoami"
Como executar vários comandos em um único contêiner? Impedindo que esse processo raiz morra. Isso pode ser feito executando algum comando inútil no início com--detached
flag e, em seguida, usando "execute" para executar comandos reais:
docker run --rm -d --name dname image_name tail -f /dev/null
docker exec dname bash -c "whoami"
docker exec dname bash -c "echo 'Nnice'"
Por que precisamos docker stop
então? Para parar esse contêiner remanescente que lançamos no snippet anterior com o comando infinitotail -f /dev/null
.