في كثير من الأحيان ، لا يعيد عامل الإرساء إنشاء الصورة المحددة كـ "build:" في docker-compose.yml على الرغم من تغيير ملف Dockerfile المعني. بدلاً من ذلك ، أحتاج إلى تشغيل docker build -t servicename_foldername. يدويًا للخدمة المتأثرة والتي ستقوم بالفعل بتحديث الصورة وفقًا لذلك.
هل هذا مقصود؟ نظرًا لأنه مزعج إلى حد ما ، لا يمكنني أبدًا التأكد من أن الصورة محدثة بالفعل وأحتاج إلى تشغيل docker build يدويًا قبل استخدام docker-compose.
صحيح ، docker-compose up
لا يعيد بناء الصورة أبدًا. هذا "مقصود" ، لكنه شيء أعتقد أنه يجب علينا تغييره: # 693
يمكنك تشغيل docker-compose build
لبناء الصور.
نسخة مكررة من # 614
يا dnephin ، يا له من عالم صغير!
أواجه مشكلة حيث لا يقوم docker-compose build
بإعادة بناء الحاويات بشكل صحيح. إنها تسبب مشاكل في منع حاوية الورنيش من البدء بسبب ملفات القفل التي لا معنى لها.
بناءً على ما قرأته في مكان آخر (على سبيل المثال # 1195) ، يبدو أن docker-compose build
هي الطريقة الموصى بها لإعادة بناء الحاويات ويجب أن تمنع مثل هذه المشكلات.
╭─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
[..]
يا @ wting
أعتقد أن ما قد يحدث هو أن ملف القفل موجود في مجلد (https://docs.docker.com/compose/overview/#/preserve-volume-data-when-containers-are-created).
يمكنك تجربة docker-compose down
لإزالة الحاويات القديمة ، والتي ستزيل مرجع وحدة التخزين. يجب أن يبدأ up
بأحجام جديدة.
إذا لم يكن في مجلد ، أعتقد أنه يمكن أن يكون القفل لم تتم إزالته مطلقًا. سيحاول إنشاء حاوية إذا كانت موجودة ولم يتغير التكوين ، لذا فإن تشغيل down
يجب أن يصلح ذلك أيضًا.
شكر! docker-compose down
وكذلك docker-compose up --force-recreate
(لكن ليس docker-compose --build
). أعتقد أنه ليس بديهيًا نظرًا لوجود وحدة تخزين مثبتة على حاوية الويب ولكن ليس حاوية الورنيش ؛ بعد ملفات الورنيش تبقى. هذا ملف 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
للسياق:
Dockerfile.dev
( VOLUME
موجود)Dockerfile.varnish
(لا يوجد VOLUME
)reddit/varnish-fastly/Dockerfile
(لا يوجد VOLUME
)شكرًا لك wting ، وجميع الذين كتبوا عن هذه المسألة ، لقد "تم حفظي" بتعليقك => "docker-compose up --force-rebe (ولكن ليس docker-compose --build)."
docker-compose up --build
صحيح ،
docker-compose up
لا يعيد بناء الصورة أبدًا. هذا "مقصود" ، لكنه شيء أعتقد أنه يجب علينا تغييره: # 693يمكنك تشغيل
docker-compose build
لبناء الصور.نسخة مكررة من # 614
شكرًا ، لقد ساعدني ذلك حقًا في تعيين Dockerfile جديد وإعادة بناء الحاوية بأحدث التغييرات
لمعلوماتك - كان لديه نفس المشكلة ونفس الإصلاح كما تمت مناقشته. قادني interwebs هنا. شكرا على المناقشات الجيدة!
docker-compose up --build -V
لتوضيح ما هي المعلمة -V
:
-V, --renew-anon-volumes Recreate anonymous volumes instead of retrieving data from the previous containers.
لإعادة إنشاء صورة واحدة داخل docker-compose
:
docker-compose up -d --force-recreate --no-deps --build $service
على سبيل المثال:
docker-compose up -d --force-recreate --no-deps --build varnish
التعليق الأكثر فائدة
صحيح ،
docker-compose up
لا يعيد بناء الصورة أبدًا. هذا "مقصود" ، لكنه شيء أعتقد أنه يجب علينا تغييره: # 693يمكنك تشغيل
docker-compose build
لبناء الصور.نسخة مكررة من # 614