Há escopo de serviços definidos em docker-compose.yml. Estes serviços foram iniciados. Preciso reconstruir apenas um deles e iniciá-lo sem outros serviços. Eu executo os seguintes comandos:
docker-compose up -d # run all services
docker-compose stop nginx # stop only one. but it still running !!!
docker-compose build --no-cache nginx
docker-compose up -d --no-deps # link nginx to other services
No final, eu tenho um velho recipiente nginx. A propósito, o docker-compose não mata todos os contêineres em execução!
docker-compose up --build
Respostas:
docker-compor
fonte
docker-compose build service1 service2 --no-cache
faz esse trabalho melhor ( github.com/docker/compose/issues/1049 ). Eu tive problema com recipientes em cache que foram construídas antes de usardocker-compose up -d --no-deps --build <service_name>
docker-compose build --no-cache service1 service2
Com docker-compose 1.19
up
Sem um ou mais
service_name
argumentos, todos os contêineres serão reconstruídosNo menu de ajuda
fonte
docker-compose up -d --force-recreate --build container_name
build --no-cache
opção, a menos que a descrição do comando esteja completamente erradaIsso deve solucionar seu problema:
fonte
stop
erm
todos os recipientes, em seguida, você pode usar o comandodocker-compose down
. Sua solução é melhor se você quiser apenas se livrar de algumas.docker-compose build <id/name>
antesup
para reconstruir o Dockerfile alterado.Como o @HarlemSquirrel postou, é o melhor e acho que a solução correta.
Mas, para responder ao problema específico do OP, deve ser algo como o seguinte comando, pois ele não deseja recriar TODOS os serviços no
docker-compose.yml
arquivo, mas apenasnginx
um:Descrição das opções:
fonte
Talvez essas etapas não estejam totalmente corretas, mas eu faço assim:
parar docker compor:
$ docker-compose down
remova o recipiente:
$ docker system prune -a
iniciar docker compor:
$ docker-compose up -d
fonte
Basta usar:
Substitua
[yml_service_name]
pelo seu nome de serviço nodocker-compose.yml
arquivo. Você pode usardocker-compose restart
para garantir que as alterações sejam efetuadas. Você pode usar--no-cache
para ignorar o cache.fonte
O problema é:
não funcionou (você disse que ainda está em execução). Se você deseja reconstruí-lo de qualquer maneira, tente matá-lo:
Se ainda assim não funcionar, tente pará-lo diretamente com o docker:
ou exclua
Se isso ainda não funcionar, verifique sua versão do docker, você pode querer atualizar.
Pode ser um erro, você pode verificar se um corresponde ao seu sistema / versão. Aqui estão algumas, por exemplo: https://github.com/docker/docker/issues/10589
https://github.com/docker/docker/issues/12738
Como solução alternativa, você pode tentar matar o processo.
fonte
Para mim, apenas buscou novas dependências do Docker Hub com ambos
--no-cache
e--pull
(que estão disponíveis paradocker-compose build
.fonte
A remoção do recipiente com rm é essencial. Sem remover, o Docker iniciará o contêiner antigo.
fonte
Somente:
fonte