Docker COPY aktualisiert Dateien beim Neuaufbau des Containers nicht

8

Ich habe eine docker-compose-staging.yml-Datei, mit der ich eine PHP-Anwendung definiere. Ich habe einen Datenvolumencontainer (App) definiert, in dem mein Anwendungscode lebt, und wird mit anderen Containern unter Verwendung von volumes_from geteilt.

docker-compose-staging.yml:

%Vor%

Diese spezielle docker-compose-staging.yml wird verwendet, um die Anwendung auf einem Cloud-Provider (DigitalOcean) bereitzustellen, und die Dockerfile für den App-Container verfügt über COPY-Befehle, die Ordner vom lokalen Verzeichnis auf das im Verzeichnis definierte Volume kopieren Konfig.

docker / staging / app / Dockerfile:

%Vor%

Dies funktioniert, wenn ich die Anwendung zum ersten Mal erstellen und bereitstellen. Der Code in meinen öffentlichen und Code-Verzeichnissen ist vorhanden und auf dem Remote-Server korrekt. Ich deploy mit dem folgenden Befehl:

%Vor%

Als nächstes versuche ich jedoch, eine Datei zu meinem lokalen öffentlichen Verzeichnis hinzuzufügen, und führe dann den folgenden Befehl aus, um den aktualisierten Code neu zu erstellen:

%Vor%

Die Ausgabe dieser Neuerstellung weist darauf hin, dass die COPY-Befehle erfolgreich waren:

%Vor%

Ich deploy dann mit:

%Vor%

Mit folgender Ausgabe:

%Vor%

Wenn ich mich jedoch bei den entfernten Containern anmelde, sind die Dateiänderungen nicht vorhanden.

Ich bin relativ neu bei Docker, also bin ich mir nicht sicher, ob ich irgendeinen Teil dieses Prozesses falsch verstanden habe! Jede Anleitung wäre willkommen.

    
Alex H 06.01.2017, 03:13
quelle

4 Antworten

1

Sie versuchen, ein vorhandenes Volume mit den Inhalten eines neuen Images zu aktualisieren, das nicht funktioniert.

Ссылка

Staaten:

Changes to a data volume will not be included when you update an image.

    
terbolous 06.01.2017, 21:16
quelle
6

Dies liegt an Cache.

Ausführen,

%Vor%

Dies wird Bilder wiederherstellen, ohne einen Cache zu verwenden.

Und dann,

%Vor%     
Harsh Vakharia 06.01.2017 04:30
quelle
1

Ich hatte ein ähnliches Problem, wenn nicht gleich während der Arbeit an der Dotnet-Core-Anwendung.

Was ich zu tun versuchte, war, meine Anwendung neu zu erstellen und mein docker image zu aktualisieren, damit ich meine Änderungen in der containerisierten Kopie sehen kann.

Also ging ich los, indem ich das zugrunde liegende Bild löschte, das von docker-compose erzeugt wurde, indem ich den Befehl benutzte, um meine Änderungen zu reflektieren:

%Vor%

Ich glaube, es sollte Unterstützung in Docker-Compose geben, aber das war genug für meine Bedürfnisse im Moment.

    
Esayas 07.09.2017 19:53
quelle
0

Ich bin nicht sicher, ob es Caching ist, weil (a) normalerweise in der Build-Ausgabe vermerkt wird, ob Cache verwendet wurde oder nicht und (b) 'build' sollte den geänderten Inhalt in Ihrem Verzeichnis erkennen und den Cache aufheben.

Ich würde versuchen, den Container auf der gleichen Maschine aufzurufen, mit der er erstellt wurde, um zu sehen, ob er aktualisiert wurde oder nicht. Wenn dies der Fall ist, wird das geänderte Bild nicht weitergegeben. Ich sehe keine Version in Ihren Dateien (build -t XXXX: 0.1 oder build -t XXXX: neuste), so könnte es sein, dass Ihre Staging-Maschine ein veraltetes Image verwendet. Oder schiebst du das neue Bild so, dass der Staging-Server es von irgendwoher zieht?

    
Ehud Kaldor 06.01.2017 17:30
quelle