Compose: docker-compose tidak membangun kembali image meskipun Dockerfile telah berubah

Dibuat pada 30 Mei 2015  ·  11Komentar  ·  Sumber: docker/compose

Sangat sering, docker-compose up tidak membangun kembali image yang ditentukan sebagai "build:" di docker-compose.yml meskipun Dockerfile terkait telah berubah. Sebagai gantinya, saya perlu menjalankan docker build -t servicename_foldername. secara manual untuk layanan yang terpengaruh yang benar-benar akan memperbarui gambar yang sesuai.

Apakah ini dimaksudkan? Karena agak mengganggu, saya tidak pernah bisa memastikan gambar tersebut benar-benar up-to-date dan perlu menjalankan buruh pelabuhan secara manual sebelum menggunakan docker-compose up.

kinquestion

Komentar yang paling membantu

Benar, docker-compose up tidak pernah membangun kembali gambar. Ini "disengaja", tetapi menurut saya ini adalah sesuatu yang harus kita ubah: # 693

Anda dapat menjalankan docker-compose build untuk membuat gambar.

Duplikat # 614

Semua 11 komentar

Benar, docker-compose up tidak pernah membangun kembali gambar. Ini "disengaja", tetapi menurut saya ini adalah sesuatu yang harus kita ubah: # 693

Anda dapat menjalankan docker-compose build untuk membuat gambar.

Duplikat # 614

Hai @dnephin , dunia yang kecil!

Saya mengalami masalah di mana docker-compose build tidak membangun kembali kontainer dengan benar. Ini menyebabkan masalah dalam mencegah penampung Varnish dimulai karena file kunci basi.

Berdasarkan apa yang saya baca di tempat lain (misalnya # 1195), sepertinya docker-compose build adalah cara yang disarankan untuk membangun kembali kontainer dan seharusnya mencegah masalah seperti ini.

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

hai @wting

Saya pikir apa yang mungkin terjadi adalah bahwa file kunci dalam volume (https://docs.docker.com/compose/overview/#/preserve-volume-data-when-containers-are-created).

Anda dapat mencoba docker-compose down untuk menghapus wadah lama, yang akan menghapus referensi volume. up harus dimulai dengan volume baru.

Jika tidak dalam volume, saya kira mungkin saja kuncinya tidak pernah dilepas. Compose akan mencoba memulai penampung jika ada dan konfigurasinya belum berubah, jadi menjalankan down harus memperbaikinya juga.

Terima kasih! docker-compose down bekerja, serta docker-compose up --force-recreate (tapi bukan docker-compose --build ). Saya kira ini tidak intuitif karena ada volume yang dipasang untuk wadah web tetapi tidak untuk wadah Varnish; namun file Varnish tetap ada. Ini file 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

Untuk konteks:

Terima kasih wting, dan semua orang yang menulis tentang masalah ini, saya telah "diselamatkan" oleh komentar Anda => "docker-compose up --force-rekreate (tapi bukan docker-compose --build)."

docker-compose up --build

Benar, docker-compose up tidak pernah membangun kembali gambar. Ini "disengaja", tetapi menurut saya ini adalah sesuatu yang harus kita ubah: # 693

Anda dapat menjalankan docker-compose build untuk membuat gambar.

Duplikat # 614

Terima kasih yang sangat membantu saya menetapkan Dockerfile baru dan membangun kembali kontainer dengan perubahan terbaru

FYI - memiliki masalah yang sama dan perbaikan yang sama seperti yang dibahas. Interwebs membawa saya ke sini. Terima kasih untuk diskusi yang bagus!

docker-compose up --build -V

Untuk memperjelas apa itu -V parameter:
-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving data from the previous containers.

Untuk membangun kembali satu gambar di dalam docker-compose :

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

misalnya:

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

Apakah halaman ini membantu?
5 / 5 - 1 peringkat