डॉक-कंपोज़ को बूटअप पर कैसे चलाएं?


20

यह एक Ubuntu 14.04 LTS VM रनिंग डॉकर पर है और मुझे संदेह respawnहै कि यह मेरी समस्या का कारण है लेकिन आदर्श समाधान के बारे में सुनिश्चित नहीं है।

वर्तमान अपस्टार्ट स्क्रिप्ट ( cat /etc/init/dockersuitecrm.conf)

description "Start docker containers"
author "Batman"
start on filesystem and started docker
stop on runlevel [!2345]
respawn
script
    docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start
end script

उस में यह 'काम करता है' myappजीवित और संवेदनशील है, लेकिन /sbin/initजब मैं निगरानी के साथ सभी CPU लेता है htop। अगर मैं अपस्टार्ट ( sudo rm /etc/init/dockersuitecrm.conf) और मैन्युअल रूप से SSH से प्रवेश को हटाता हूं और docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp startमैं 100% मुद्दे पर सीपीयू नहीं देखता हूं और पहले myappकी तरह फिर से जीवित और उत्तरदायी है।

इसलिए मुझे संदेह है कि जिस तरह से मैं ऊपर शुरू कर रहा हूं वह गलत है। शुरुआत करने का सही तरीका docker-composeहमेशा मैनुअल हस्तक्षेप के बिना चल रहा है?

संपादित करें: कोई बात नहीं लेकिन /usr/bin/myapp -> /home/batman/dockerapps/myappएक प्रतीकात्मक लिंक के रूप में होना चाहिए ।


समाधान नहीं बल्कि एक काम के रूप में, मैं इसे respawnस्क्रिप्ट में कमांड के बिना चलाने में सक्षम हूं ।
DeepSpace101

एक ही सवाल है, लेकिन मैंने यह देखा: serverfault.com/questions/615820/… । जादू उपयोग करने के साथ है docker-compose start
मार्क लोपेज

मेरे पास एक समान कॉन्फ़िगरेशन है, लेकिन एक scriptब्लॉक का उपयोग न करें । शायद यह समस्या का हिस्सा है? मेरे पास chdir /usr/bin/myapp/और exec docker-compose upइसके बजाय अगली पंक्ति में है ।
जेमरिचा

क्या आप पृष्ठभूमि में डॉक-कम्पोज़ चलाना नहीं चाहते हैं? यानीdocker-compose up -d
KCD

पुनः आरंभ करें: हमेशा कंटेनर में कल्पना करें
Lu32

जवाबों:


9

बस एक समय अंतराल का उपयोग करने के बजाय, केवल क्रेबट का उपयोग करें, @reboot कहें

इसलिए उस उपयोगकर्ता के रूप में लॉगिन करें जिसे इस स्क्रिप्ट को शुरू करना चाहिए और कमांड टाइप करना चाहिए

crontab -e

और फिर दर्ज करें

@reboot /better/enter/fullpath/here/docker-compose -f /usr/bin/myapp/docker-compose.yml -p myapp start

सिस्टम को रिबूट करें और देखें कि क्या यह काम करता है। ऊपर की ओर एक फायदा है, यहां तक ​​कि यह थोड़ा बाद में शुरू किया गया है, आपको पहले से ही ऊपर होने के लिए नेटवर्किंग जैसी निर्भरता के बारे में ज्यादा चिंता करने की ज़रूरत नहीं है।


किसी भी विचार कैसे एक रिबूट साफ इस तरह से चल रहा होगा?
जस्टिन स्मिथ

1
क्षमा करें, लेकिन यह बहुत अच्छा जवाब नहीं है। यह समय-समय पर काम कर सकता है, लेकिन जैसा कि क्रोन को अन्य डॉकटर आवश्यकताओं से पहले लोड किया जा सकता है, आप एक दौड़ की स्थिति में दौड़ते हैं।
ओथियस

2

मान लें कि आप में डॉकर कंपोज़ की परिभाषाओं के संस्करण 2 का उपयोग कर रहे हैं docker-compose.yml, तो आप निम्न कार्य कर सकते हैं:

इस restart: alwaysतरह परिभाषित :

version: '2'
services:
  web:
    image: nginx
    restart: always

संदर्भ: https://docs.docker.com/compose/compose-file/compose-file-v2/


1
सवाल यह है कि किस डॉकर की साइट जवाब नहीं देती, वह थी: "डॉकटर-कंपोज़ शुरू करने का सही तरीका हमेशा मैनुअल हस्तक्षेप के बिना चल रहा है?"
ओथियस

0

डॉकर तुरंत तैयार नहीं है यदि आप स्क्रिप्ट को बहुत जल्दी चलाते हैं, तो कुछ भी नहीं होगा। जैसे ही यह तैयार हो जाता है आप डॉकटर पीएस कमांड का जवाब देना शुरू कर देंगे ताकि आप इस ट्रिक को क्रॉस्टैब में इस्तेमाल कर सकें:

नैनो / आदि / crontabs / जड़

@reboot / usr / bin / docker ps && / usr / bin / docker-compose -f /prod.yml start

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.