Sehr oft erstellt Docker-Compose Up das als "build:" angegebene Image in der Docker-Compose.yml nicht neu, obwohl sich die jeweilige Docker-Datei geändert hat. Stattdessen muss ich Docker build -t servicename_foldername ausführen. manuell für den betroffenen Dienst, der das Image tatsächlich entsprechend aktualisiert.
Ist das beabsichtigt? Da es ziemlich ärgerlich ist, kann ich nie sicher sein, dass das Image tatsächlich auf dem neuesten Stand ist und Docker Build manuell ausführen muss, bevor Docker-Compose verwendet wird.
Richtig, docker-compose up
niemals ein Image neu. Dies ist "beabsichtigt", aber ich denke, wir sollten es ändern: # 693
Sie können docker-compose build
ausführen, um die Bilder zu erstellen.
Duplikat von # 614
Hey @dnephin , was für eine kleine Welt!
Ich stoße auf ein Problem, bei dem docker-compose build
Container nicht ordnungsgemäß neu erstellt. Dies führt zu Problemen beim Verhindern des Startens eines Lackcontainers aufgrund veralteter Sperrdateien.
Basierend auf dem, was ich an anderer Stelle gelesen habe (z. B. # 1195), scheint docker-compose build
die empfohlene Methode zum Neuerstellen von Containern zu sein und sollte solche Probleme verhindern.
╭─wting<strong i="11">@nuc</strong> ~/code/reddit-mobile ‹python-2.7.12› ‹wting_chan-159_add_varnish_to_2X×ad20b6d›
╰─➤ docker ps 2016.09.15 12:20:46 PDT
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
╭─wting<strong i="12">@nuc</strong> ~/code/reddit-mobile ‹python-2.7.12› ‹wting_chan-159_add_varnish_to_2X×ad20b6d›
╰─➤ docker-compose --version 2016.09.15 12:20:48 PDT
docker-compose version 1.8.0, build f3628c7
╭─wting<strong i="13">@nuc</strong> ~/code/reddit-mobile ‹python-2.7.12› ‹wting_chan-159_add_varnish_to_2X×ad20b6d›
╰─➤ docker --version 2016.09.15 12:20:51 PDT
Docker version 1.12.1, build 23cf638
╭─wting<strong i="14">@nuc</strong> ~/code/reddit-mobile ‹python-2.7.12› ‹wting_chan-159_add_varnish_to_2X×ad20b6d›
╰─➤ docker-compose build && docker-compose up 2 ↵ 2016.09.15 12:23:35 PDT
Building web
Step 1 : FROM reddit/reddit-nodejs:latest
---> ee57c186eb35
Step 2 : VOLUME /src
---> Using cache
---> 3720601d98c8
Step 3 : WORKDIR /src
---> Using cache
---> d4b9b360ef4e
Step 4 : EXPOSE 4444
---> Using cache
---> 5e232be73781
Step 5 : ENTRYPOINT npm start
---> Using cache
---> 1094fc9857bb
Successfully built 1094fc9857bb
Building varnish
Step 1 : FROM quay.io/reddit/varnish-fastly
# Executing 1 build trigger...
Step 1 : COPY default.vcl /etc/varnish/default.vcl
---> Using cache
---> ac9dadb35674
Step 2 : ENV VARNISH_PORTS 8080
---> Using cache
---> 3c43e0226f5f
Step 3 : EXPOSE 8080
---> Using cache
---> c88093c2ff32
Successfully built c88093c2ff32
Starting redditmobile_web_1
Starting redditmobile_varnish_1
Attaching to redditmobile_web_1, redditmobile_varnish_1
varnish_1 | storage_malloc: max size 100 MB.
varnish_1 | SHMFILE owned by running varnishd master (pid=1) # STALE LOCK FILE
varnish_1 | (Use unique -n arguments if you want multiple instances.)
web_1 |
web_1 | > [email protected] start /src
web_1 | > NODE_ENV=production npm run server
web_1 |
redditmobile_varnish_1 exited with code 2
web_1 |
web_1 | > [email protected] server /src
web_1 | > NODE_ENV=production node ./bin/ProductionServer.js
web_1 |
web_1 | Started cluster with 4 processes.
web_1 | Started server at PID 31
web_1 | Started server at PID 46
[..]
hey @wting
Ich denke, was passieren könnte, ist, dass sich die Sperrdatei in einem Volume befindet (https://docs.docker.com/compose/overview/#/preserve-volume-data-when-containers-are-created).
Sie können docker-compose down
versuchen, um die alten Container zu entfernen, wodurch die Volume-Referenz entfernt wird. Das nächste up
sollte mit neuen Volumes beginnen.
Wenn es nicht in einem Volume ist, könnte es sein, dass das Schloss nie entfernt wurde. Compose versucht, einen Container zu starten, wenn er vorhanden ist und sich die Konfiguration nicht geändert hat. Wenn Sie also down
ausführen, sollte dies ebenfalls behoben werden.
Vielen Dank! docker-compose down
funktionierte ebenso wie docker-compose up --force-recreate
(aber nicht docker-compose --build
). Ich nehme an, es ist nicht intuitiv, da ein Volume für den Webcontainer bereitgestellt ist, nicht jedoch für den Lackcontainer. dennoch bleiben Lackdateien hängen. Hier ist die docker-compose.yml
-Datei:
version: '2'
services:
web:
build:
context: .
dockerfile: Dockerfile.dev
ports:
- "4444:4444"
volumes:
- .:/src
varnish:
build:
context: .
dockerfile: Dockerfile.varnish
ports:
- "4301:80"
depends_on:
- web
Zum Kontext:
Dockerfile.dev
( VOLUME
vorhanden)Dockerfile.varnish
(keine VOLUME
)reddit/varnish-fastly/Dockerfile
(keine VOLUME
)Vielen Dank an wting und alle, die zu diesem Thema geschrieben haben. Ich wurde durch Ihren Kommentar "gerettet" => "Docker-Compose Up - Force-Recreate (aber nicht Docker-Compose - Build)."
docker-compose up --build
Richtig,
docker-compose up
niemals ein Image neu. Dies ist "beabsichtigt", aber ich denke, wir sollten es ändern: # 693Sie können
docker-compose build
ausführen, um die Bilder zu erstellen.Duplikat von # 614
Vielen Dank, das hat mir wirklich geholfen, eine neue Docker-Datei zuzuweisen und den Container mit den neuesten Änderungen neu zu erstellen
Zu Ihrer Information - hatte das gleiche Problem und die gleiche Lösung wie besprochen. Die Interwebs führten mich hierher. Danke für die guten Diskussionen!
docker-compose up --build -V
Um zu verdeutlichen, was der Parameter -V
ist:
-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving data from the previous containers.
So erstellen Sie ein einzelnes Bild in docker-compose
:
docker-compose up -d --force-recreate --no-deps --build $service
z.B:
docker-compose up -d --force-recreate --no-deps --build varnish
Hilfreichster Kommentar
Richtig,
docker-compose up
niemals ein Image neu. Dies ist "beabsichtigt", aber ich denke, wir sollten es ändern: # 693Sie können
docker-compose build
ausführen, um die Bilder zu erstellen.Duplikat von # 614