Qual é a diferença entre docker-compose up e docker-compose start?

124

Sempre que executo

docker-compose start 
docker-compose ps

Eu vejo meus contêineres com o estado "UP". Se eu fizer

docker-compose up -d

Vou ver mais detalhado, mas ele terá o mesmo estado. Existe alguma diferença entre os dois comandos?

Michael Villeneuve
fonte

Respostas:

166

docker-compose start
( https://docs.docker.com/compose/reference/start/ )

Inicia contêineres existentes para um serviço.

docker-compor up
( https://docs.docker.com/compose/reference/up/ )

Cria, (re) cria, inicia e anexa a contêineres para um serviço.

A menos que eles já estejam em execução, este comando também inicia todos os serviços vinculados.

O docker-compose upcomando agrega a saída de cada contêiner (essencialmente em execução docker-compose logs -f). Quando o comando sai, todos os contêineres são parados. A execução docker-compose up -dinicia os contêineres em segundo plano e os deixa em execução.

Se houver contêineres existentes para um serviço, e a configuração ou imagem do serviço tiver sido alterada após a criação do contêiner, docker-compose upas alterações serão interrompidas, interrompendo e recriando os contêineres (preservando os volumes montados). Para impedir que o Compose pegue as alterações, use o --no-recreatesinalizador.

Para obter a referência completa da CLI:
https://docs.docker.com/compose/reference/

Luiz Lago
fonte
3
link atualizado para referência da docker-compose CLI: docs.docker.com/compose/reference * docker-compose up: docs.docker.com/compose/reference/up * docker-compose start: docs.docker.com/compose/reference / start
michael
18

Na janela de encaixe Perguntas freqüentes, isso é explicado com muita clareza:

Qual é a diferença entre up, run e start?

Normalmente, você quer docker-compose up. Use uppara iniciar ou reiniciar todos os serviços definidos em a docker-compose.yml. No modo "anexado" padrão, você vê todos os logs de todos os contêineres. No modo "desanexado" ( -d), o Compose sai após o início dos contêineres, mas os contêineres continuam sendo executados em segundo plano.

O docker-compose runcomando é para executar tarefas "pontuais" ou "adhoc". Requer o nome do serviço que você deseja executar e inicia apenas contêineres para serviços dos quais o serviço em execução depende. Use run para executar testes ou executar uma tarefa administrativa, como remover ou adicionar dados a um contêiner de volume de dados. O runcomando atua como docker run -tina medida em que abre um terminal interativo para o contêiner e retorna um status de saída correspondente ao status de saída do processo no contêiner.

O docker-compose startcomando é útil apenas para reiniciar contêineres criados anteriormente, mas foram parados. Ele nunca cria novos contêineres.

Supun Praneeth
fonte
como o comando restart é diferente de qualquer um deles - execute, inicie, inicie?
Nag