Compose: Docker-Compose Up erstellt kein Image neu, obwohl sich Dockerfile geändert hat

Erstellt am 30. Mai 2015  ·  11Kommentare  ·  Quelle: docker/compose

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.

kinquestion

Hilfreichster Kommentar

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

Alle 11 Kommentare

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:

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: # 693

Sie 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

War diese Seite hilfreich?
5 / 5 - 1 Bewertungen