ฉันกำลังใช้ rabbitmq และตัวอย่างงูเหลือมง่ายๆจากที่นี่ พร้อมกับนักเทียบท่าเขียน ปัญหาของฉันคือฉันต้องรอให้ rabbitmq เริ่มต้นอย่างเต็มที่ จากสิ่งที่ฉันค้นหาจนถึงตอนนี้ฉันไม่รู้ว่าจะรอด้วย container x (ใน case case ของฉัน) จนกว่า y (rabbitmq) จะเริ่มขึ้น
ฉันพบบล็อกนี้ที่เขาตรวจสอบว่าโฮสต์อื่น ๆ ออนไลน์อยู่หรือไม่ ฉันก็พบคำสั่งนักเทียบท่านี้:
รอ
การใช้งาน: นักเทียบท่ากำลังรอ CONTAINER [CONTAINER ... ]
บล็อกจนกว่าคอนเทนเนอร์จะหยุดจากนั้นพิมพ์รหัสออก
การรอให้ตู้คอนเทนเนอร์หยุดนั้นอาจไม่ใช่สิ่งที่ฉันกำลังมองหา แต่ถ้าเป็นเช่นนั้นเป็นไปได้ไหมที่จะใช้คำสั่งนั้นใน docker-compose.yml วิธีแก้ปัญหาของฉันคือรอสักครู่และตรวจสอบพอร์ต แต่นี่เป็นวิธีที่จะทำให้สำเร็จหรือไม่ ถ้าฉันไม่รอฉันได้รับข้อผิดพลาด
นักเทียบท่า-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()
Dockerfile สำหรับผู้ปฏิบัติงาน:
FROM python:2-onbuild
RUN ["pip", "install", "pika"]
CMD ["python","rabbit.py"]
อัปเดตพฤศจิกายน 2558 :
เชลล์สคริปต์หรือการรออยู่ในโปรแกรมของคุณอาจเป็นทางออกที่เป็นไปได้ แต่หลังจากเห็นปัญหานี้ฉันกำลังมองหาคำสั่งหรือคุณสมบัติของนักเทียบท่า / นักเทียบท่าเขียนตัวเอง
พวกเขากล่าวถึงวิธีแก้ปัญหาสำหรับการตรวจสุขภาพซึ่งอาจเป็นตัวเลือกที่ดีที่สุด การเชื่อมต่อ tcp แบบเปิดไม่ได้หมายความว่าบริการของคุณพร้อมหรืออาจยังคงพร้อมใช้งาน นอกจากนั้นฉันต้องเปลี่ยนจุดเริ่มต้นใน dockerfile ของฉัน
ดังนั้นฉันหวังว่าจะได้คำตอบด้วยคำสั่ง docker-compose บนบอร์ดซึ่งหวังว่าจะเป็นเช่นนั้นหากพวกเขาทำปัญหานี้เสร็จ
อัปเดตมีนาคม 2559
มีข้อเสนอสำหรับการจัดเตรียมวิธีในตัวเพื่อตรวจสอบว่าคอนเทนเนอร์เป็น "ชีวิต" ดังนั้นนักแต่งเพลงอาจจะใช้มันในอนาคตอันใกล้
อัปเดตมิถุนายน 2559
ดูเหมือนว่า Healthcheck จะถูกรวมเข้ากับนักเทียบท่าในเวอร์ชั่น 1.12.0
อัปเดตมกราคม 2560
ฉันพบวิธีแก้ปัญหาDocker-Composeดู: Docker Compose รอคอนเทนเนอร์ X ก่อนเริ่ม Y