Tôi đang sử dụng rabbitmq và một mẫu trăn đơn giản từ đây cùng với docker-compose. Vấn đề của tôi là tôi cần đợi rabbitmq bắt đầu hoàn toàn. Từ những gì tôi đã tìm kiếm cho đến nay, tôi không biết cách chờ đợi với container x (trong trường hợp nhân viên của tôi) cho đến khi y (rabbitmq) được bắt đầu.
Tôi tìm thấy blogpost này nơi anh ấy kiểm tra nếu máy chủ khác đang trực tuyến. Tôi cũng tìm thấy lệnh docker này :
chờ đợi
Cách sử dụng: docker chờ CONTAINER [CONTAINER ...]
Chặn cho đến khi một container dừng lại, sau đó in mã thoát của nó.
Chờ đợi một container dừng lại có thể không phải là điều tôi đang tìm kiếm nhưng nếu có, liệu có thể sử dụng lệnh đó bên trong docker-compose.yml không? Giải pháp của tôi cho đến nay là chờ vài giây và kiểm tra cổng, nhưng đây có phải là cách để đạt được điều này?. Nếu tôi không đợi tôi sẽ gặp lỗi.
docker-compose.yml
worker:
build: myapp/.
volumes:
- myapp/.:/usr/src/app:ro
links:
- rabbitmq
rabbitmq:
image: rabbitmq:3-management
mẫu xin chào python (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 cho công nhân:
FROM python:2-onbuild
RUN ["pip", "install", "pika"]
CMD ["python","rabbit.py"]
Cập nhật tháng 11 năm 2015 :
Một kịch bản shell hoặc chờ đợi bên trong chương trình của bạn có thể là một giải pháp khả thi. Nhưng sau khi thấy vấn đề này, tôi đang tìm kiếm một lệnh hoặc tính năng của docker / docker-compose chính nó.
Họ đề cập đến một giải pháp để thực hiện kiểm tra sức khỏe, có thể là lựa chọn tốt nhất. Kết nối tcp mở không có nghĩa là dịch vụ của bạn đã sẵn sàng hoặc có thể vẫn sẵn sàng. Ngoài ra, tôi cần thay đổi điểm vào trong dockerfile của mình.
Vì vậy, tôi hy vọng câu trả lời với docker-compose trên bảng lệnh, hy vọng sẽ có trường hợp nếu họ hoàn thành vấn đề này.
Cập nhật tháng 3 năm 2016
Có một đề xuất cung cấp một cách tích hợp để xác định xem một container có còn "sống" hay không. Vì vậy, docker-compose có thể sử dụng nó trong tương lai gần.
Cập nhật tháng 6 năm 2016
Có vẻ như Healthcheck sẽ được tích hợp vào docker trong Phiên bản 1.12.0
Cập nhật tháng 1 năm 2017
Tôi tìm thấy một giải pháp soạn thảo docker xem: Docker Compose chờ container X trước khi bắt đầu Y