Compose: لا يعيد عامل البناء إنشاء الصورة على الرغم من تغيير Dockerfile

تم إنشاؤها على ٣٠ مايو ٢٠١٥  ·  11تعليقات  ·  مصدر: docker/compose

في كثير من الأحيان ، لا يعيد عامل الإرساء إنشاء الصورة المحددة كـ "build:" في docker-compose.yml على الرغم من تغيير ملف Dockerfile المعني. بدلاً من ذلك ، أحتاج إلى تشغيل docker build -t servicename_foldername. يدويًا للخدمة المتأثرة والتي ستقوم بالفعل بتحديث الصورة وفقًا لذلك.

هل هذا مقصود؟ نظرًا لأنه مزعج إلى حد ما ، لا يمكنني أبدًا التأكد من أن الصورة محدثة بالفعل وأحتاج إلى تشغيل docker build يدويًا قبل استخدام docker-compose.

kinquestion

التعليق الأكثر فائدة

صحيح ، docker-compose up لا يعيد بناء الصورة أبدًا. هذا "مقصود" ، لكنه شيء أعتقد أنه يجب علينا تغييره: # 693

يمكنك تشغيل docker-compose build لبناء الصور.

نسخة مكررة من # 614

ال 11 كومينتر

صحيح ، 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

للسياق:

شكرًا لك 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

هل كانت هذه الصفحة مفيدة؟
5 / 5 - 1 التقييمات