Rabbitmq ve docker-compose ile buradan basit bir python örneği kullanıyorum . Benim sorunum, rabbitmq'in tamamen başlamasını beklemem gerektiğidir. Şimdiye kadar aradım, y (rabbitmq) başlayana kadar x (benim durumumda işçi) konteyner ile nasıl beklemek bilmiyorum.
Diğer blogun çevrimiçi olup olmadığını kontrol ettiği blog bloğunu buldum . Ayrıca bu docker komutunu buldum :
Bekle
Kullanım: docker bekleyin KONTEYNER [KONTEYNER ...]
Bir kap durana kadar engelleyin, ardından çıkış kodunu yazdırın.
Bir kapının durmasını beklemek belki de aradığım şey değil, eğer öyleyse, docker-compose.yml içinde bu komutu kullanmak mümkün mü? Şimdiye kadarki çözümüm birkaç saniye beklemek ve limanı kontrol etmek, ama bunu başarmanın yolu bu mu? Beklemezsem bir hata alırım.
liman işçisi-compose.yml
worker:
build: myapp/.
volumes:
- myapp/.:/usr/src/app:ro
links:
- rabbitmq
rabbitmq:
image: rabbitmq:3-management
python merhaba örneği (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()
İşçi için Dockerfile:
FROM python:2-onbuild
RUN ["pip", "install", "pika"]
CMD ["python","rabbit.py"]
Kasım 2015 Güncellemesi :
Bir kabuk komut dosyası veya programınızın içinde beklemek olası bir çözüm olabilir. Ancak bu sorunu gördükten sonra , docker / docker-compose'un kendisinin bir komutunu veya özelliğini arıyorum.
Sağlık kontrolünü uygulamak için en iyi seçenek olabilecek bir çözümden bahsediyorlar. Açık bir tcp bağlantısı, hizmetinizin hazır veya hazır kalabileceği anlamına gelmez. Buna ek olarak dockerfile dosyamdaki giriş noktasını değiştirmem gerekiyor.
Bu yüzden docker-compose on board komutları ile bir cevap bekliyorum, umarım bu sorunu bitirirlerse böyle olur.
Mart 2016 Güncellemesi
Bir kabın "canlı" olup olmadığını belirlemek için yerleşik bir yol sağlamak için bir teklif vardır . Yani docker-compose bunu yakın gelecekte kullanabilir.
Haziran 2016 Güncellemesi
Sağlık kontrolünün Sürüm 1.12.0'da bağlantı istasyonuna entegre edileceği anlaşılıyor
Güncelleme Ocak 2017
Bir docker-compose çözümü buldum: Bkz. Docker Y'yi başlatmadan önce X konteynerini bekle