docker- रचना केवल कुछ कंटेनरों के लिए


161

मेरे पास docker-compose.ymlकई कंटेनर हैं। उनमें से तीन मेरे ऐप (क्लाइंट, सर्वर और डेटाबेस) के लिए हैं और बाकी विभिन्न देव टूल्स (जैसे psql, npm, manage.py, आदि) के लिए हैं। जब मैं उन docker-compose upसभी को शुरू करता हूं, लेकिन मैं केवल तीन मुख्य शुरू करना चाहता हूं। मेरे द्वारा निर्दिष्ट लिंक की वजह से, मैं उन तीनों को शुरू कर सकता हूं, docker-compose up clientलेकिन फिर आउटपुट केवल उस एक कंटेनर से होता है। तो, निम्न में से एक करने का एक तरीका है:

  1. डॉकटर-कंपोज करें कि किन कंटेनरों को शुरू करना चाहिए docker-compose up
  2. सभी लिंक किए गए कंटेनरों से आउटपुट प्राप्त करें docker-compose up client

1
डॉक्स के अनुसार: docker-compose up [options] [SERVICE...]आपको उन सेवाओं का सबसेट शुरू करना चाहिए, जिन्हें आप सूचीबद्ध करना चाहते हैं।
जेसी चिशोल्म

जवाबों:


257

आप कंटेनर का उपयोग करके शुरू कर सकते हैं:

$ docker-compose up -d client

इससे बैकग्राउंड में कंटेनर चलेंगे और आउटपुट अवेलेबल होगा

$ docker-compose logs

और इसमें आपके सभी शुरू किए गए कंटेनर शामिल होंगे


11
उत्तम। अगर आप लॉग को स्टडआउट देखना चाहते हैं, तो -d फ्लैग को छोड़ दें
Natus Drew

क्या एक आश्रित कंटेनर को शुरू करना संभव है, अगर चित्रण कंटेनर पहले से ही चल रहा है और मैं इसे पुनः आरंभ नहीं करना चाहता?
मेजरहेरो

43

अपने डॉकटर-कम्पोज़ फ़ाइल में परिभाषित एक विशेष सेवा शुरू करने के लिए। उदाहरण के लिए अगर आपके पास डॉकटर-कंपोज है।लाइम है

sudo docker-compose start db  

इस तरह एक कम्पोज फाइल दी:

version: '3.3'

services:
   db:
     image: mysql:5.7
     ports:
       - "3306:3306"
     volumes:
       - ./db_data:/var/lib/mysql
     restart: always
     environment:
       MYSQL_ROOT_PASSWORD: yourPassword
       MYSQL_DATABASE: wordpress
       MYSQL_USER: wordpress
       MYSQL_PASSWORD: yourPassword

   wordpress:
     depends_on:
       - db
     image: wordpress:latest
     ports:
       - "80:80"
     volumes:
       - ./l3html:/var/www/html
     restart: always
     environment:
       WORDPRESS_DB_HOST: db:3306
       WORDPRESS_DB_USER: wordpress
       WORDPRESS_DB_PASSWORD: yourPassword
volumes:
    db_data:
    l3html:

कुछ समय पहले आप अपना पूरा सुइट शुरू करने से पहले केवल MySQL शुरू करना चाहते हैं (कभी-कभी आप सिर्फ एक डेटाबेस को पॉप्युलेट करना चाहते हैं)।


9
sudoपहले क्यों docker-compose ...? यह आवश्यक नहीं है, है ना?
जोकेम शुल्नेक्लोपर

1
यदि आपके पास डॉकटर समूह में अपना उपयोगकर्ता नहीं है, तो यह आवश्यक होगा।
डेल

क्या फर्क पड़ता है अगर मैं sudo docker-compose up db इसके बजाय का उपयोग करता हूं sudo docker-compose start db
लुक एरन

3
@ LukAron - startमानता है कि कंटेनर पहले से मौजूद है और बस इसे शुरू करता है, upयदि आवश्यक हो तो छवियों को खींचेगा , यदि आवश्यक हो तो कंटेनर बनाएं, फिर कंटेनर शुरू करें।
जेसी चिशोल्म


4

एक अच्छा समाधान केवल वांछित सेवाओं को इस तरह चलाना है:

docker-compose up --build $(<services.txt)

और services.txt फ़ाइल इस तरह दिखती है:

services1 services2, etc

निश्चित रूप से अगर निर्भरता (depend_on), संबंधित सेवाओं को एक साथ चलाने की आवश्यकता है।

- केवल वैकल्पिक है, उदाहरण के लिए।


0

docker-composeV1.5 के बाद से झंडे के साथ कई docker-compose.ymlफाइलें पास करना-f संभव है । यह आपको अपने देव उपकरणों को एक अलग में विभाजित करने की अनुमति देता है docker-compose.ymlजिसे आप केवल ऑन-डिमांड में शामिल करते हैं:

# start and attach to all your essential services
docker-compose up

# execute a defined command in docker-compose.dev.yml
docker-compose -f docker-compose.dev.yml run npm update

# if your command depends_on a service you need to include both configs
docker-compose -f docker-compose.yml -f docker-compose.dev.yml run npm update

इस पर गहन चर्चा के लिए # 1896 पर docker को लिखें / लिखें

मैंने इसे और अधिक सुविधा ( डॉकटर / कंपोज़ # 7548 ) के साथ प्राप्त करने के लिए एक कार्यक्षमता जोड़ने के लिए एक पुल अनुरोध बनाया है, लेकिन चूंकि इसमें कंपोज़ फ़ाइल कल्पना में बदलाव की आवश्यकता है, इसलिए अब इस पर कंपोज़-स्पेस / कम्पोज़-स्पेक # पर चर्चा की गई है 87


-1

आप आमतौर पर ऐसा नहीं करना चाहते हैं। डॉकर कंपोज़ के साथ आप उन सेवाओं को परिभाषित करते हैं जो आपके ऐप की रचना करती हैंnpmऔर manage.pyसिर्फ प्रबंधन आदेश हैं। आप उनके लिए एक कंटेनर की जरूरत नहीं है। यदि आपको जरूरत है, तो अपने डेटाबेस तालिकाओं को बनाएं manage.py, जो आपको करना है:

docker-compose run client python manage.py create_db

इसे वन-ऑफ डायनोस हरोकू के रूप में उपयोग करें।

यदि आपको वास्तव में अलग-अलग कंटेनरों के रूप में इन प्रबंधन आदेशों का इलाज करने की आवश्यकता है (और इन के लिए डॉकर कंपोज़ का भी उपयोग करें), तो आप एक अलग .ymlफ़ाइल बना सकते हैं और निम्नलिखित कमांड के साथ डॉकर कम्पोज़ शुरू कर सकते हैं :

docker-compose up -f my_custom_docker_compose.yml

15
बहुत सारे लोग ऐसा करना चाहते हैं।
कोजीरो

8
@ msrd0 आप आमतौर पर ऐसा नहीं करना चाहते हैं? लोगों को खुद तय करने दो!
क्रिस

1
एसओ पर एक नियम होना चाहिए कि आप बिना बताए नीचे क्यों नहीं जा सकते। क्योंकि यह (या कम से कम पहले भाग) सबसे अधिक समझ में आता है, हर संभव प्रबंधन कमांड के लिए एक अतिरिक्त कंटेनर होना अति अजीब है।
thclark
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.