Docker-compose.yml में डॉकटर कंटेनर का पुनर्निर्माण कैसे करें?


218

सेवाओं की गुंजाइश है जो docker-compose.yml में परिभाषित हैं। ये सेवा शुरू कर दी गई है। मुझे इनमें से केवल एक को फिर से बनाने और अन्य सेवाओं के बिना इसे शुरू करने की आवश्यकता है। मैं निम्नलिखित कमांड चलाता हूं:

docker-compose up -d # run all services
docker-compose stop nginx # stop only one. but it still running !!!
docker-compose build --no-cache nginx 
docker-compose up -d --no-deps # link nginx to other services

अंत में मुझे पुराना नाज़िन कंटेनर मिला। वैसे, डॉकटर-कंपोज़ सभी चल रहे कंटेनरों को नहीं मारता है!


4
docker-compose up --build
जिन्ना बालू

जवाबों:


233

docker- रचना करना

$docker-compose up -d --no-deps --build <service_name>

-no-deps - लिंक की गई सेवाओं को शुरू न करें।

--build - कंटेनर शुरू करने से पहले छवियों का निर्माण।


19
docker-compose build service1 service2 --no-cache क्या यह काम बेहतर है ( github.com/docker/compose/issues/1049 )। मैं कैश्ड कंटेनरों के साथ जारी किया गया था जो उपयोग करने से पहले बनाए गए थे docker-compose up -d --no-deps --build <service_name>
evgpisarchik

33
@evgpisarchik यह आदेश थोड़ा हटकर है, यह होना चाहिएdocker-compose build --no-cache service1 service2
मैथ्यू विलकॉक्सन

181

डॉकटर-रचना के साथ 1.19 up

docker-compose up --build --force-recreate --no-deps [-d] [<service_name>..]

एक या अधिक service_nameतर्कों के बिना सभी कंटेनरों का पुनर्निर्माण किया जाएगा

मदद मेनू से

Options:
    -d, --detach        Detached mode: Run containers in the background,
                        print new container names. Incompatible with
                        --abort-on-container-exit.
    --no-deps           Don't start linked services.
    --force-recreate    Recreate containers even if their configuration
                        and image haven't changed.
    --build             Build images before starting containers.

4
मैं उलझन में हूँ कि यह सवाल का जवाब कैसे देता है। हम सिर्फ एक कंटेनर का पुनर्निर्माण कैसे करते हैं?
डंकन जोन्स

11
आप कमांड के अंत में इसका नाम जोड़कर केवल एक कंटेनर का पुनर्निर्माण कर सकते हैं। docker-compose up -d --force-recreate --build container_name
हार्लेमस्केलर

एक सेकंड रुको, यह कंटेनर को फिर से बनाता है , यह build --no-cacheविकल्प के बराबर नहीं है , जब तक कि कमांड विवरण पूरी तरह से गलत न हो
स्लाव

67

यह आपकी समस्या को ठीक करना चाहिए:

docker-compose ps # lists all services (id, name)
docker-compose stop <id/name> #this will stop only the selected container
docker-compose rm <id/name> # this will remove the docker container permanently 
docker-compose up # builds/rebuilds all not already built container 

12
यदि आप stopऔर rmसभी कंटेनर चाहते हैं तो आप कमांड का उपयोग कर सकते हैं docker-compose down। यदि आप केवल कुछ से छुटकारा पाना चाहते हैं तो आपका समाधान बेहतर है।
हिरोवेटरी

यह समाधान सेटअप के लिए एक अच्छा फिट है जहाँ आप पूरे डॉकटर अनुप्रयोग को रोकना नहीं चाहते हैं और सेवाओं में से एक को फिर से बनाना चाहते हैं
ब्लूज़मर्स

मुझे वास्तव में परिवर्तित डॉकरफाइल के पुनर्निर्माण docker-compose build <id/name>से पहले चलाने की आवश्यकता थी up
वाजेक हर्मेज़

49

जैसा कि @HarlemSquirrel ने पोस्ट किया है, यह सबसे अच्छा है और मुझे लगता है कि सही समाधान है।

लेकिन, ओपी विशिष्ट समस्या का जवाब देने के लिए, यह निम्नलिखित कमांड की तरह कुछ होना चाहिए, क्योंकि वह docker-compose.ymlफ़ाइल में सभी सेवाओं को फिर से बनाना नहीं चाहता है , लेकिन केवल nginxएक:

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

विकल्प विवरण:

Options:
  -d                  Detached mode: Run containers in the background,
                      print new container names. Incompatible with
                      --abort-on-container-exit.
  --force-recreate    Recreate containers even if their configuration
                      and image haven't changed.
  --build             Build images before starting containers.
  --no-deps           Don't start linked services.

9

हो सकता है कि ये कदम काफी सही न हों, लेकिन मैं इस तरह करता हूं:

स्टॉप डॉकटर लिखें: $ docker-compose down

कंटेनर निकालें: $ docker system prune -a

शुरू करो रचना: $ docker-compose up -d


4

बस उपयोग करें:

docker-compose build [yml_service_name]

फ़ाइल [yml_service_name]में अपना सेवा नाम बदलें docker-compose.yml। आप docker-compose restartयह सुनिश्चित करने के लिए उपयोग कर सकते हैं कि परिवर्तन प्रभावित हैं। आप --no-cacheकैश को अनदेखा करने के लिए उपयोग कर सकते हैं ।


2

यह समस्या है:

$ docker-compose stop nginx

काम नहीं किया (आपने कहा कि यह अभी भी चल रहा है)। यदि आप इसे फिर से बनाने जा रहे हैं, तो आप इसे मारने की कोशिश कर सकते हैं:

$ docker-compose kill nginx

यदि यह अभी भी काम नहीं करता है, तो इसे सीधे docker से रोकने का प्रयास करें:

$ docker stop nginx

या इसे हटा दें

$ docker rm -f nginx

यदि वह अभी भी काम नहीं करता है, तो अपने डॉक के संस्करण की जांच करें, आप अपग्रेड करना चाह सकते हैं।

यह एक बग हो सकता है, आप जांच सकते हैं कि कोई आपके सिस्टम / संस्करण से मेल खाता है या नहीं। यहाँ कुछ जोड़े हैं, उदाहरण के लिए: https://github.com/docker/docker/issues/10589

https://github.com/docker/docker/issues/12738

वर्कअराउंड के रूप में, आप इस प्रक्रिया को मारने की कोशिश कर सकते हैं।

$ ps aux | grep docker 
$ kill 225654 # example process id

1

मेरे लिए इसने केवल डोकर हब से नई निर्भरता प्राप्त की --no-cacheऔर दोनों के लिए --pull(जो उपलब्ध हैं docker-compose build

# other steps before rebuild
docker-compose build --no-cache --pull nginx # rebuild nginx
# other steps after rebuild, e.g. up (see other answers)

0
docker-compose stop nginx # stop if running
docker-compose rm -f nginx # remove without confirmation
docker-compose build nginx # build
docker-compose up -d nginx # create and start in background

आरएम के साथ कंटेनर को हटाना आवश्यक है। हटाने के बिना, डॉकर पुराने कंटेनर को शुरू करेगा।


-9

केवल:

$ docker-compose restart [yml_service_name]

4
इससे नए परिवर्तन नहीं होंगे। मैनुअल से - यदि आप अपने docker-compose.yml कॉन्फ़िगरेशन में परिवर्तन करते हैं, तो ये परिवर्तन इस कमांड को चलाने के बाद परिलक्षित नहीं होंगे।
22
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.