여기 에서 dockm -compose와 함께 rabbitmq와 간단한 파이썬 샘플을 사용하고 있습니다 . 내 문제는 rabbitmq가 완전히 시작될 때까지 기다려야한다는 것입니다. 지금까지 검색 한 결과 y (rabbitmq)가 시작될 때까지 컨테이너 x (내 경우에는 worker)로 기다리는 방법을 모르겠습니다.
다른 호스트가 온라인 상태인지 확인하는 블로그 게시물을 찾았습니다 . 이 도커 명령 도 찾았습니다 .
기다림
사용법 : docker wait CONTAINER [CONTAINER ...]
컨테이너가 멈출 때까지 차단 한 다음 종료 코드를 인쇄하십시오.
컨테이너가 멈추기를 기다리는 것은 아마도 내가 찾고있는 것이 아니지만 그것이 있다면 docker-compose.yml 내에서 해당 명령을 사용할 수 있습니까? 지금까지 내 해결책은 몇 초 기다렸다가 포트를 확인하는 것이지만 이것이 달성하는 방법입니까? 기다리지 않으면 오류가 발생합니다.
docker-compose.yml
worker:
build: myapp/.
volumes:
- myapp/.:/usr/src/app:ro
links:
- rabbitmq
rabbitmq:
image: rabbitmq:3-management
python hello 샘플 (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"]
2015 년 11 월 업데이트 :
쉘 스크립트 나 프로그램 내부를 기다리는 것이 가능한 해결책 일 수 있습니다. 그러나이 문제를 본 후 docker / docker-compose 자체의 명령 또는 기능을 찾고 있습니다.
그들은 건강 점검을 구현하기위한 솔루션을 언급하는데, 이것이 최선의 선택 일 수 있습니다. 열린 TCP 연결이 서비스 준비 또는 준비 상태를 의미하지는 않습니다. 그 외에도 dockerfile에서 진입 점을 변경해야합니다.
그래서 나는 docker-compose on board 명령으로 대답을 바라고 있습니다.이 문제를 끝내면 좋을 것입니다.
2016 년 3 월 업데이트
컨테이너가 "사용중인"지 여부를 판별하기위한 기본 제공 방법을 제공하기위한 제안 이 있습니다 . 따라서 docker-compose는 가까운 장래에 사용할 수 있습니다.
2016 년 6 월 업데이트
버전 1.12.0에서 상태 점검이 도커에 통합 된 것으로 보입니다.
2017 년 1 월 업데이트
도커 작성 솔루션을 찾았습니다 .Docker Compose는 Y를 시작하기 전에 컨테이너 X를 기다립니다.