Compose: docker-compose up ne reconstruit pas l'image bien que Dockerfile ait changé

Créé le 30 mai 2015  ·  11Commentaires  ·  Source: docker/compose

Très souvent, docker-compose up ne reconstruit pas l'image spécifiée comme "build:" dans le docker-compose.yml bien que le Dockerfile respectif ait changé. Au lieu de cela, je dois exécuter docker build -t nom_service_nom_dossier. manuellement pour le service concerné qui mettra à jour l'image en conséquence.

Est-ce voulu? Parce que c'est plutôt ennuyeux, je ne peux jamais être sûr que l'image est réellement à jour et que je dois exécuter manuellement la construction de docker avant d'utiliser docker-compose up.

kinquestion

Commentaire le plus utile

Vrai, docker-compose up ne reconstruit jamais une image. C'est "prévu", mais c'est quelque chose que je pense que nous devrions changer: # 693

Vous pouvez exécuter docker-compose build pour créer les images.

Duplicata de # 614

Tous les 11 commentaires

Vrai, docker-compose up ne reconstruit jamais une image. C'est "prévu", mais c'est quelque chose que je pense que nous devrions changer: # 693

Vous pouvez exécuter docker-compose build pour créer les images.

Duplicata de # 614

Hey @dnephin , quel petit monde!

Je rencontre un problème où docker-compose build ne reconstruit pas correctement les conteneurs. Cela pose des problèmes pour empêcher un conteneur Varnish de démarrer en raison de fichiers de verrouillage obsolètes.

D'après ce que j'ai lu ailleurs (par exemple # 1195), il semble que docker-compose build soit le moyen recommandé pour reconstruire les conteneurs et devrait éviter de tels problèmes.

╭─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
[..]

salut @wting

Je pense que ce qui pourrait se passer, c'est que le fichier de verrouillage est dans un volume (https://docs.docker.com/compose/overview/#/preserve-volume-data-when-containers-are-created).

Vous pouvez essayer docker-compose down pour supprimer les anciens conteneurs, ce qui supprimera la référence de volume. Le prochain up devrait commencer avec de nouveaux volumes.

Si ce n'est pas dans un volume, je suppose que c'est peut-être simplement que le verrou n'a jamais été supprimé. Compose essaiera de démarrer un conteneur s'il existe et que la configuration n'a pas changé, donc l'exécution de down devrait également résoudre ce problème.

Merci! docker-compose down fonctionné, ainsi que docker-compose up --force-recreate (mais pas docker-compose --build ). Je suppose que ce n'est pas intuitif car il y a un volume monté pour le conteneur Web mais pas pour le conteneur Varnish; pourtant, les limes Varnish restent. Voici le fichier docker-compose.yml :

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

Pour le contexte:

Merci beaucoup, et à tous ceux qui ont écrit sur ce problème, j'ai été "sauvé" par votre commentaire => "docker-compose up --force-receate (mais pas docker-compose --build)."

docker-compose up --build

Vrai, docker-compose up ne reconstruit jamais une image. C'est "prévu", mais c'est quelque chose que je pense que nous devrions changer: # 693

Vous pouvez exécuter docker-compose build pour créer les images.

Duplicata de # 614

Merci qui m'a vraiment aidé à attribuer un nouveau Dockerfile et à reconstruire le conteneur avec les dernières modifications

FYI - avait le même problème et le même correctif que celui discuté. Les interwebs m'ont conduit ici. Merci pour les bonnes discussions!

docker-compose up --build -V

Pour clarifier ce qu'est le paramètre -V :
-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving data from the previous containers.

Pour reconstruire une seule image dans docker-compose :

docker-compose up -d --force-recreate --no-deps --build $service

par exemple:

docker-compose up -d --force-recreate --no-deps --build varnish

Cette page vous a été utile?
5 / 5 - 1 notes