2017-12-12 19 views
0

準備ができたらスクリプトを実行するようにドッカーファイルを設定しようとしています。ドッカーでポートを待ち受けるには?

基本的に、私のマイクロサービスは、別のサービスが開始されるまで待つことを希望します。私は本の中でチュートリアルを次のですので、私はこのdockerfile持っている:

FROM openjdk:8-jdk-alpine 
RUN apk update && apk upgrade && apk add netcat-openbsd 
ARG JAR_FILE 
ADD target/${JAR_FILE} /usr/share/theexplorer/theexplorer.jar 
ADD run.sh run.sh 
RUN chmod +x run.sh 
CMD ./run.sh 
EXPOSE 8761 

をそして、私はこのスクリプト(run.sh)を持っている:

echo "********************************************************" 
echo "Waiting for the configuration server to start on port $CONFIGSERVER_PORT" 
echo "********************************************************" 
while ! `nc -z configserver $CONFIGSERVER_PORT `; do sleep 3; done 
echo ">>>>>>>>>>>> Configuration Server has started" 
java -jar /usr/share/theexplorer/theexplorer.jar 

をしかし$ CONFIGSERVER_PORTの値はnullです。 run.shを呼び出している間にパラメータを渡さなかったので、この変数をどのように利用できるはずがありません。したがって、$ CONFIGSERVER_PORTはどのように設定する必要がありますか?私のサービスが依存しているサービスのポートを知るためのスマートな方法はありますか?

ご協力いただきましてありがとうございます。

+2

実行コマンドの変数を 'docker run -e CONFIGSERVER_PORT = myservice' – Munchkin

+0

のように渡します。設定サーバーは別のコンテナで実行されているか、ホスト上で直接実行されていますか?それとも同じコンテナで開始されていますか? – yamenk

+0

設定サーバーは私のマシンの別のコンテナにあります –

答えて

3

docker run -itd -p 5555:8761 myimage/myimageは、ホストポート5555をコンテナポート8761にマップします。これは待機している「その他の」サービスでも同じです。この時点では、動的ホストポートマッピングに依存しません。これは、各サービスのポートを知る方法です。

実行中のサービスコンテナには、この場合はlocalhost:5555でアクセスできます。

+0

あなたの答えに感謝します。しかし、私は@Munchkinがより正確だと信じています。私はスクリプトにポートを渡したいと思います。しかし、ドッカーが作ったのはちょっと簡単だと分かった –

関連する問題