2017-05-10 14 views
1

wait-for-itを使用して、Docker-Composeの1つのサービスをAlpine Linuxディストリビューションに基づくイメージを使用して別のサービスを待つことに興味があります。Alpine Linuxでbashスクリプトを使用するには?

私はwait-for-itリポジトリのクローンを作成して、Dockerfile次それに

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 

対照的に、私の(Ubuntu 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 

私のUbuntuローカルマシンのように、bashスクリプトがAlpineコンテナで動作していないようです。これをどうすれば解決できますか?

+2

wait-for-it.shの実行ファイルとは何ですか?最初の行を参照してください。 #!/ bin/bashまたはsh? – Robert

+0

シェルスクリプトのようにエラーがあります。スクリプトを貼り付けてください – n2o

答えて

2

そのwait-for-itスクリプトはsh準拠ではありませんので、アルファベットの画像にbashをインストールする必要があります。

しかし、このような「ハック」を避け、代わりにHEALTHCHECKを利用することをおすすめしますか?例えば

、他は健康であるためには、一つのサービス待ちを有する次のようになります。あなたがここに来た場合は

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

    other_service 
    depends_on: 
    my_service: 
     condition: service_healthy 

注意してください、これが唯一のv2コンファイル、ない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回だけ実行し、それが通過するまでブロックしたいと思います。 –

1

で動作しますAlpineでスクリプトを実行している "No such file or directory"エラーの解決策を探していたので、別のことは、スクリプトにUNIXの行末があることです。

私の場合は、スクリプトをウィンドウに保存してドッカーの画像に追加していて、それは同じ役に立たないエラーメッセージを出していました。

関連する問題