Seria útil se alguém pudesse fazer isso
docker-compose build service1 service2 --no-cache
Acabei de perceber que a sintaxe é
docker-compose build --no-cache service1 service2
Eu estava procurando por isso !!
Aqui está minha maneira limpa de reconstruir minha pilha de composição
cd (para o seu DIR de composição)
docker-compose rm --all &&
docker-compose pull &&
docker-compose build --no-cache &&
docker-compose up -d --force-recreate &&
Faz sentido? Estou procurando as melhores práticas aqui :)
+1
O --force-recreate é necessário?
+1
Acho que --force-recreate
é a melhor escolha
--force-recreate
é desnecessário, pois todos os containers acabaram de ser removidos.
Se você quiser limpar _tudo_, down
é melhor que rm
, porque também pode remover volumes e redes.
$ docker-compose down -h
Stops containers and removes containers, networks, volumes, and images
created by `up`.
By default, the only things removed are:
- Containers for services defined in the Compose file
- Networks defined in the `networks` section of the Compose file
- The default network, if one is used
Networks and volumes defined as `external` are never removed.
Usage: down [options]
Options:
--rmi type Remove images. Type must be one of:
'all': Remove all images used by any service.
'local': Remove only images that don't have a custom tag
set by the `image` field.
-v, --volumes Remove named volumes declared in the `volumes` section
of the Compose file and anonymous volumes
attached to containers.
--remove-orphans Remove containers for services not defined in the
Compose file
Estou usando isso desde 3 meses e é sólido como rocha para minhas necessidades.
Não quero remover: redes, volumes e imagens
echo && echo "PikWi says: docker-compose stop" && \
docker-compose stop && \
echo "PikWi says: docker-compose rm ..." && \
docker-compose rm -f --all && \
echo "PikWi says: docker-compose pull" && \
docker-compose pull && \
echo "PikWi says: docker-compose build ..." && \
docker-compose build --no-cache && \
echo "PikWi says: docker-compose up ..." && \
docker-compose up -d --force-recreate --remove-orphans
Ficarei feliz em usar algo mais curto ou mais limpo. Eu sou todas as melhores práticas :)
Saúde!
--no-cache não funciona.... qual é a alternativa --force-rebuild continua a usar cache :(
@julianfrank Não tenho certeza do que você quis dizer com --no-cache does not work
mas talvez você o execute como
docker-compose build SERVICE_NAME --no-cache
quando na verdade tem que ser docker-compose build --no-cache SERVICE_NAME
?
Quando as etapas são as mesmas nos diferentes serviços sendo compilados, ele ainda usa o cache do contêiner criado anteriormente no script... uso...
se você foi fodido pelo cache e, em vez de usar nenhum cache, insira novos comandos no arquivo docker para forçar a renovação da camada de cache envie polegares para cima, o manuseio do cache no docker precisa de uma refatoração ... ou funciona realmente limpando as camadas de cache
De fato, não funciona...
Você pode fazer todas as alterações em um Dockerfile para um serviço e não há reflexos em docker-compose build --no-cache
docker-compose up -d --build --no-deps web
reconstruirá o contêiner para o serviço chamado "web" em seu docker-compose.yml. Depois que a reconstrução for concluída, ela reiniciará o contêiner especificado.
--no-deps
limitará a reconstrução ao nome do serviço especificado no comando.
Além disso, este comando reconstruirá o contêiner se você estiver copiando arquivos para o contêiner e um dos arquivos copiados tiver sido alterado - como requirements.txt
Para sua informação
docker-compose up --force-recreate --build
Aparentemente, não há opção --no-cache para o comando up
Parece que a recriação forçada não usa essa opção. Por favor corrija-me se eu estiver errado!
Então, a melhor abordagem seria eu fazer isso ...
Remove contêiner e imagens > cria imagens sem cache de compilação > docker-compose up desanexado > segue os logs (para que você possa ctrl+c
fora dele)
docker-compose build --force-rm --no-cache && docker-compose up --detach && docker-compose logs -f
Janelas:
docker-compose build --force-rm --no-cache ; docker-compose up --detach ; docker-compose logs -f
Comentários muito úteis
Acabei de perceber que a sintaxe é
docker-compose build --no-cache service1 service2