2017-05-10 1 views
1

wait-for-it을 사용하여 Docker-Compose의 한 서비스가 Alpine Linux 배포를 기반으로 한 이미지를 사용하여 다른 서비스를 기다리는 데 관심이 있습니다. 나는 wait-for-it 저장소를 복제하고 거기에 추가하면 Dockerfile 다음 그러나Alpine Linux에서 bash 스크립트를 사용하는 방법은 무엇입니까?

는 다음

FROM alpine 
RUN apk --update add bash 
COPY wait-for-it.sh wait-for-it.sh 
CMD ["./wait-for-it.sh", "www.google.com:80"] 

가 나는 docker run waitforit 다음 docker build --tag waitforit .를 사용하여 구축,하지만 난이 오류 메시지가 얻을 :

timeout: can't execute '15': No such file or directory 
wait-for-it.sh: timeout occurred after waiting 15 seconds for www.google.com:80 

대조적으로 이것은 내 (우분투 16.04 LTS) 컴퓨터에서이 명령을 실행할 때 표시됩니다.

wait-for-it.sh: waiting 15 seconds for www.google.com:80 
wait-for-it.sh: www.google.com:80 is available after 0 seconds 

내 우분투 로컬 컴퓨터에 있기 때문에 bash 스크립트가 Alpine 컨테이너에서 작동하지 않는 것 같습니다. 이 문제를 어떻게 해결할 수 있습니까?

+2

wait-for-it.sh의 실행 파일은 무엇입니까? 첫 번째 줄을보십시오. #!/bin/bash 또는 sh? – Robert

+0

쉘 스크립트와 같은 오류가 있습니다. 스크립트를 붙이십시오. – n2o

답변

2

해당 wait-for-it 스크립트는 준수하지 않으므로 bash을 알파인 이미지에 설치해야합니다.

그러나 이러한 "해킹"을 피하고 대신 HEALTHCHECK을 사용 하시겠습니까? 같을 것이다 건강에 서로에 대한 하나 개의 서비스 대기를 가지고 예를 들어

: 당신이 여기있어 경우

services: 
    my_service: 
    image: something 
    healthcheck: 
     test: nc -z 3306 

    other_service 
    depends_on: 
    my_service: 
     condition: service_healthy 

주의 사항은,이뿐만 아니라 v3

+1

사실 저는 나중에 [wait-for] (https://github.com/Eficode/wait-for)를 발견했습니다. 이것은 wait-for-it을 기반으로하지만 'alpine'을 준수합니다. [HEALTHCHECK] (https://docs.docker.com/engine/reference/builder/#healthcheck)에 관해서는 설명서에서 알 수 있듯이 컨테이너가 시작된 후 __interval__ 초 후 다시 실행되고 __interval__ 초마다 실행됩니다 이전 점검이 완료되었습니다. 내 경우에는, 그러나, 나는 실제 애플 리케이션을 실행하기 전에 한 번만 검사를 실행하고 그것을 통과 때까지 차단하고 싶습니다. –

1

, v2 작성 파일과 함께 작동합니다 내가 알프스에서 스크립트를 실행하는 "No such file or directory"오류에 대한 해결책을 찾았을 때 또 다른 것은 스크립트에 유닉스 라인 엔딩이 있다는 것입니다.

필자의 경우 스크립트를 창에 저장하고 도커 이미지에 추가하는 것과 마찬가지로 도움이되지 않는 오류 메시지가 나타납니다.

관련 문제