Dockerfileでサーバーを起動してから初期データを投入する場合などに、起動コマンドを実行した直後にデータを投入するとサーバーがまだ立ち上がっておらず、エラーが発生して困るという事がたまにあります。起動コマンドが返るほうがデタッチされた子プロセスがlistenを開始するよりも早い場合などにそうなりますね。
そしてそれを避けようとしてDockerfileに sleep 2
とか書いてあるのをたまに見かけます。まあ大体それで大丈夫なのですが、どうも気になります。本当に2秒で十分なのか?何秒なら十分なのか?
そういう場合は、nc -z
コマンドで疎通確認を行えば安心できます。
until nc -z <host> <port>; do sleep 1; done
sleep 2
とかやってる場所を上記で置き換えればokです。