私はtravisを使用した展開にECSを使用しようとしています。 ある時点ですべてが機能していましたが、今は停止しました。AWS ECSタスクの起動と停止が続行します
私はこのチュートリアルhttps://testdriven.io/part-five-ec2-container-service/
に、次の午前の停止と開始保つ2つのタスクがあります。
これらは私がタスクに表示されるメッセージです。
STOPPED (CannotStartContainerError: API error (500): oci ru)
STOPPED (Essential container in task exited)
はこれらは私がログに表示されるメッセージです。
FATAL: could not write to file "pg_wal/xlogtemp.28": No space left on device
container_linux.go:262: starting container process caused "exec: \"./entrypoint.sh\": permission denied"
はなぜECSは、非常に多くの新しいタスクを停止して開始していますか?以前これは起こっていなかった。
これは、私がトラビス経由で呼び出している私のメインマイクロサービスからの私のdocker_deploy.shです。
#!/bin/sh
if [ -z "$TRAVIS_PULL_REQUEST" ] || [ "$TRAVIS_PULL_REQUEST" == "false" ];
then
if [ "$TRAVIS_BRANCH" == "staging" ];
then
JQ="jq --raw-output --exit-status"
configure_aws_cli() {
aws --version
aws configure set default.region us-east-1
aws configure set default.output json
echo "AWS Configured!"
}
make_task_def() {
task_template=$(cat ecs_taskdefinition.json)
task_def=$(printf "$task_template" $AWS_ACCOUNT_ID $AWS_ACCOUNT_ID)
echo "$task_def"
}
register_definition() {
if revision=$(aws ecs register-task-definition --cli-input-json "$task_def" --family $family | $JQ '.taskDefinition.taskDefinitionArn');
then
echo "Revision: $revision"
else
echo "Failed to register task definition"
return 1
fi
}
deploy_cluster() {
family="testdriven-staging"
cluster="ezasdf-staging"
service="ezasdf-staging"
make_task_def
register_definition
if [[ $(aws ecs update-service --cluster $cluster --service $service --task-definition $revision | $JQ '.service.taskDefinition') != $revision ]];
then
echo "Error updating service."
return 1
fi
}
configure_aws_cli
deploy_cluster
fi
fi
これは私のユーザーmicroserviceから私のDockerfileです:
FROM python:3.6.2
# install environment dependencies
RUN apt-get update -yqq \
&& apt-get install -yqq --no-install-recommends \
netcat \
&& apt-get -q clean
# set working directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
# add requirements (to leverage Docker cache)
ADD ./requirements.txt /usr/src/app/requirements.txt
# install requirements
RUN pip install -r requirements.txt
# add entrypoint.sh
ADD ./entrypoint.sh /usr/src/app/entrypoint.sh
RUN chmod +x /usr/src/app/entrypoint.sh
# add app
ADD . /usr/src/app
# run server
CMD ["./entrypoint.sh"]
entrypoint.sh:
#!/bin/sh
echo "Waiting for postgres..."
while ! nc -z users-db 5432;
do
sleep 0.1
done
echo "PostgreSQL started"
python manage.py recreate_db
python manage.py seed_db
gunicorn -b 0.0.0.0:5000 manage:app
私は私のクラスタを削除し、自分のタスクを登録解除し、再起動を試みたが、ECSはまだ継続的に停止します今すぐ新しいタスクを開始します。
それがうまく働いていた。違いは、代わりに私のDockerfileで、私はトラヴィスが通過している
RUN python manage.py recreate_db
RUN python manage.py seed_db
CMD gunicorn -b 0.0.0.0:5000 manage:app
を有していたこと。
非常に多くのタスクを開始し停止したため十分なスペースがないと思います。 –
タスクはスペースを消費しません。画像は一回しかダウンロードされませんでした。 –
しかし、タスク定義のリビジョンの自動化を試みる前にうまくいきました。 –