私はJenkins
プロジェクトをビルドし、ユニットテストと統合テストを実行しています。 これの前に、Jenkins
はいくつかのドッカーコンテナ(mongodb
、cassandra
などが入っています)を起動してから起動します。 リソースにアクセスできないため、テストが失敗することがあります。 ちょっと掘り出した後、私のコンテナがすべて始まっていないことに気付きました。だからここ は、私が持っているものである。各docker
コンテナの定義とドッカーコンテナポートがすぐに利用できない
docker-compose.yml
start_docker.sh
スクリプト:
time docker-compose pull
time docker-compose --project-name $JOB_NAME up -d
time docker-compose --project-name $JOB_NAME ps
echo "Wait services are started"
docker-compose --project-name $JOB_NAME ps -q
container_names=`docker-compose --project-name $JOB_NAME ps -q`
container_nb="${#container_names}"
for container_name in $container_names; do
ports=`docker port $container_name | cut -d "/" -f1 `
service_ip=`docker inspect $container_name | grep "IPAddress" | grep 172 | sed "s/[^0-9]*\\([0-9\\.]\\+\\)[^0-9]*/\\1/"`
for port in $ports; do
while ! nc -z $service_ip $port; do
sleep 1 # wait for 1 second before check again
done
done
done
私が気づいたことは、時にはports
変数は、いくつかのコンテナの空であることです私がここに表示しているのは、私が見るものです:
[unit_test] target2sellcoredevelop_dse_1 /etc/dse/run.sh Up
[unit_test] target2sellcoredevelop_mongo_1 docker-entrypoint.sh mongo ... Up
[unit_test] target2sellcoredevelop_pentaho-pdi_1 /bin/sh -c /bin/bash -c "/ ... Up 0.0.0.0:9999->9999/tcp
[unit_test] target2sellcoredevelop_rabbitmq_1 docker-entrypoint.sh /init.sh Up
[unit_test] target2sellcoredevelop_redis_sentinel1_1 docker-entrypoint.sh sh -c ... Up
[unit_test] target2sellcoredevelop_rediscachereco_master_1 docker-entrypoint.sh redis ... Up
[unit_test] target2sellcoredevelop_rediscatalog_master_1 docker-entrypoint.sh redis ... Up
[unit_test] target2sellcoredevelop_redisuser_master_1 docker-entrypoint.sh redis ... Up
あなたが見ることができるように、それらのいくつかは既にポート番号を持っていて、それらのいくつかは持っていません。 私は2つの問題があります:
なぜポート番号が利用できないのですか?いくつかのドッカーのゾンビのプロセスのためですか?もしそうなら、どのように私はきれいにすることができますか?
どうすれば実際にそれらが本当に始まるのを待つことができますか?
EDIT:私の問題は、時には一部のコンテナが起動しないことがあると思います。 私の質問:どうすればそれを調べることができますか?
OSに応じて(diffコマンド)、必要なポートを占有しているプロセスがあるかどうかを手動でチェックして、それをクリアすることもできます。 – Shanky