Es wäre hilfreich, wenn man dies tun könnte
docker-compose build service1 service2 --no-cache
Habe gerade festgestellt, dass die Syntax ist
docker-compose build --no-cache service1 service2
Das habe ich gesucht!!
Hier ist mein sauberer Weg, um meinen Compose-Stack neu aufzubauen
cd (in Ihr Kompositionsverzeichnis)
docker-compose rm --all &&
docker-compose pull &&
docker-compose build --no-cache &&
docker-compose up -d --force-recreate &&
Sinn ergeben? Ich suche hier nach Best Practice :)
+1
Wird --force-recreate benötigt?
+1
Ich denke, --force-recreate
ist die beste Wahl
--force-recreate
ist unnötig, da alle Container gerade entfernt wurden.
Wenn Sie _alles_ löschen möchten, ist down
besser als rm
, da es auch Volumes und Netzwerke entfernen kann.
$ 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
Ich benutze es seit 3 Monaten und es ist absolut solide für meine Bedürfnisse.
Ich möchte nicht entfernen: Netzwerke, Volumes und Images
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
Ich werde froh sein, etwas Kürzeres oder Saubereres zu verwenden. Ich bin alles Best Practice :)
Prost!
--no-cache funktioniert nicht .... was ist die Alternative --force-rebuild verwendet weiterhin den Cache :(
@julianfrank Ich bin mir nicht sicher, was du mit --no-cache does not work
gemeint hast, aber vielleicht führst du es so aus
docker-compose build SERVICE_NAME --no-cache
wenn es eigentlich docker-compose build --no-cache SERVICE_NAME
sein muss?
Wenn die Schritte für die verschiedenen Dienste, die erstellt werden, gleich sind, wird immer noch der Cache aus dem Container verwendet, der gerade zuvor im Skript erstellt wurde ... Ich habe eine Alternative ausgearbeitet, um dieselben Schritte zu verwenden, wenn ich den Cache verwenden und die Reihenfolge ändern möchte, um das Überspringen des Caches zu erzwingen Verwendungszweck...
Wenn Sie vom Cache gestört wurden und stattdessen keinen Cache verwenden, fügen Sie neue Befehle in die Docker-Datei ein, um eine Erneuerung der Cache-Ebene zu erzwingen. Senden Sie Daumen hoch, die Cache-Behandlung in Docker muss umgestaltet werden ... oder funktioniert wirklich, indem Sie die Cache-Ebenen bereinigen
Tatsächlich funktioniert es nicht...
Sie können alle Änderungen an einem Dockerfile für einen Dienst vornehmen, und es gibt keine Überlegungen zu docker-compose build --no-cache
docker-compose up -d --build --no-deps web
erstellt den Container für den Dienst namens „web“ in Ihrer docker-compose.yml neu. Sobald die Neuerstellung abgeschlossen ist, wird der angegebene Container neu gestartet.
--no-deps
beschränkt die Neuerstellung auf den Namen des im Befehl angegebenen Dienstes.
Außerdem erstellt dieser Befehl den Container neu, wenn Sie Dateien in den Container kopieren und sich eine der hineinkopierten Dateien geändert hat – wie z. B. „requirements.txt“.
FYI
docker-compose up --force-recreate --build
Es gibt anscheinend keine Option --no-cache für den up-Befehl
Sieht so aus, als würde force-recreate diese Option nicht verwenden. Bitte korrigiert mich, wenn ich falsch liege!
Also am besten würde ich das so machen...
Entfernt Container und Images > erstellt Images ohne Build-Cache > Docker-Compose-Up getrennt > folgt den Protokollen (damit Sie ctrl+c
daraus machen können)
docker-compose build --force-rm --no-cache && docker-compose up --detach && docker-compose logs -f
Fenster:
docker-compose build --force-rm --no-cache ; docker-compose up --detach ; docker-compose logs -f
Hilfreichster Kommentar
Habe gerade festgestellt, dass die Syntax ist
docker-compose build --no-cache service1 service2