私は、Dockerコンテナのリポジトリを停止し、再ビルドし、Pytestを使っていくつかのテストを実行するBashスクリプトを作成しようとしています。コードのDRYを作るために、私は次のように機能wait_for_container
を定義しようとしました:私は繰り返し、一方ローカル変数をBash関数で使用する方法
nc: getaddrinfo: Temporary failure in name resolution
Waiting for the ipercroncompose_rethinkdb_1 container...
を得る:
docker stop $(docker ps -a -q)
docker-compose build
docker-compose up -d
function wait_for_container {
local CONTAINER=$1
local PORT=$2
ADDR=$(docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $CONTAINER)
until nc -z $CONTAINER $PORT
do
echo "Waiting for the $CONTAINER container..."
sleep 0.5
done
echo "$CONTAINER listening at $ADDR:$PORT"
}
RETHINKDB_CONTAINER=ipercroncompose_rethinkdb_1
RETHINKDB_PORT=28015
wait_for_container $RETHINKDB_CONTAINER $RETHINKDB_PORT
RABBITMQ_CONTAINER=ipercroncompose_rabbitmq_1
RABBITMQ_PORT=5672
wait_for_container $RABBITMQ_CONTAINER $RABBITMQ_PORT
cd test
pytest
をしかし、私はこれが動作していないことが判明します非DRYスクリプトに従うこと作業を行います。
docker stop $(docker ps -a -q)
docker-compose build
docker-compose up -d
RETHINKDB_CONTAINER=ipercroncompose_rethinkdb_1
RETHINKDB_ADDR=$(docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $RETHINKDB_CONTAINER)
RETHINKDB_PORT=28015
until nc -z $RETHINKDB_ADDR $RETHINKDB_PORT
do
echo "Waiting for the RethinkDB container..."
sleep 0.5
done
echo "RethinkDB listening at ${RETHINKDB_ADDR}:${RETHINKDB_PORT}."
RABBITMQ_CONTAINER=ipercroncompose_rabbitmq_1
RABBITMQ_ADDR=$(docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $RABBITMQ_CONTAINER)
RABBITMQ_PORT=5672
until nc -z $RABBITMQ_ADDR $RABBITMQ_PORT
do
echo "Waiting for the RabbitMQ container..."
sleep 0.5
done
echo "RabbitMQ listening at ${RABBITMQ_ADDR}:${RABBITMQ_PORT}."
cd test
pytest
をして
をエコーRethinkDB listening at 172.18.0.2:28015.
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
Waiting for the RabbitMQ container...
RabbitMQ listening at 172.19.0.2:5672.
であり、その後にPytestsの結果が続きます。同じ効果を得るために、どのようにしてwait_for_container
の機能を改善できますか?
私は大雑把な一見で何か間違っているとは思わないが(おそらく変数の拡張を引用するべきであるが、あなたのサンプルデータは引用符で囲まれていない拡張では問題にはならない)、不思議なことに 'nc'ユーティリティが呼ばれているようだ。スクリプトにログを追加して、実行時に 'nc'コマンド全体が実際にどのように見えるかを確認できますか? – Fred
ちなみに、コードの重複を避けるための関数を使用する方法がありますが、それがうまくいかない理由はありませんので、これを実行する時間を取ってください(おそらく、関数をまったく使用することには関係しません)。 – Fred
'nc -z $ CONTAINER $ PORT' ==>'〜nc -z $ ADDR $ PORT' –