मैं से RabbitMQ और एक साधारण अजगर नमूना उपयोग कर रहा हूँ यहाँ डोकर-लिखें सुविधा के साथ एक साथ। मेरी समस्या यह है कि मुझे पूरी तरह से शुरू करने के लिए खरगोशों की प्रतीक्षा करने की आवश्यकता है। अब तक मैंने जो कुछ भी खोजा है, मैं नहीं जानता कि कंटेनर एक्स (मेरे मामले में कार्यकर्ता) के साथ वाई (खरगोशबिटक) शुरू होने तक इंतजार कैसे करें।
मुझे यह ब्लॉगपोस्ट मिला जहां वह जांचता है कि क्या दूसरा होस्ट ऑनलाइन है। मुझे यह डॉकटर कमांड भी मिली :
रुको
उपयोग: डॉकटर प्रतीक्षा करें [कंटेनर ...]
एक कंटेनर बंद होने तक ब्लॉक करें, फिर उसका निकास कोड प्रिंट करें।
एक कंटेनर के रुकने का इंतजार करना शायद वह नहीं है जिसकी मुझे तलाश है लेकिन अगर ऐसा है तो क्या उस कमांड का इस्तेमाल डोकर-कम्पोज के अंदर करना संभव है। मेरा अब तक का समाधान कुछ सेकंड इंतजार करना और बंदरगाह की जांच करना है, लेकिन क्या इसे प्राप्त करने का तरीका है? अगर मैं प्रतीक्षा नहीं करता तो मुझे एक त्रुटि मिलती है।
डोकर-compose.yml
worker:
build: myapp/.
volumes:
- myapp/.:/usr/src/app:ro
links:
- rabbitmq
rabbitmq:
image: rabbitmq:3-management
अजगर हेल्लो सैंपल (rabbit.py):
import pika
import time
import socket
pingcounter = 0
isreachable = False
while isreachable is False and pingcounter < 5:
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
s.connect(('rabbitmq', 5672))
isreachable = True
except socket.error as e:
time.sleep(2)
pingcounter += 1
s.close()
if isreachable:
connection = pika.BlockingConnection(pika.ConnectionParameters(
host="rabbitmq"))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print (" [x] Sent 'Hello World!'")
connection.close()
कार्यकर्ता के लिए डॉकरीफाइल:
FROM python:2-onbuild
RUN ["pip", "install", "pika"]
CMD ["python","rabbit.py"]
अद्यतन नवंबर 2015 :
एक शेल स्क्रिप्ट या आपके कार्यक्रम के अंदर प्रतीक्षा करना शायद एक संभव समाधान है। लेकिन इस मुद्दे को देखने के बाद मैं खुद ही docker / docker-compose की कमांड या फीचर की तलाश कर रहा हूं।
वे स्वास्थ्य जांच को लागू करने के लिए एक समाधान का उल्लेख करते हैं, जो सबसे अच्छा विकल्प हो सकता है। एक खुला tcp कनेक्शन का मतलब यह नहीं है कि आपकी सेवा तैयार है या तैयार रह सकती है। इसके अलावा मुझे अपने डॉकटराइल में अपना प्रवेश बिंदु बदलना होगा।
इसलिए मैं बोर्ड कमांड पर डॉकटर-कंपोज़ के साथ जवाब की उम्मीद कर रहा हूं, जो इस मामले को खत्म करने की उम्मीद करेंगे।
अपडेट मार्च 2016
वहाँ एक है प्रस्ताव एक अंतर्निहित तरीका अगर एक कंटेनर "जीवित" है निर्धारित करने के लिए प्रदान करने के लिए। इसलिए निकट भविष्य में डॉकटर-कंपोज इसका उपयोग कर सकते हैं।
अपडेट जून 2016
ऐसा लगता है कि Healthcheck को संस्करण 1.12.0 में docker में एकीकृत किया जाएगा
अपडेट जनवरी 2017
मुझे एक डॉकटर- कंपोज़ सॉल्यूशन देखने को मिला: Y शुरू करने से पहले डॉकटर कंपोज़ कंटेनर X का इंतज़ार करें