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.
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:
Dockerfile.dev
( VOLUME
sekarang)Dockerfile.varnish
(tidak ada VOLUME
)reddit/varnish-fastly/Dockerfile
(tidak ada VOLUME
)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: # 693Anda 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
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: # 693Anda dapat menjalankan
docker-compose build
untuk membuat gambar.Duplikat # 614