2017-12-08 26 views
0

私は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 

を有していたこと。

答えて

1

エラーはすぐそこにあります。

ホストに十分なスペースがありません。 entrypoint.shファイルが拒否されています。

(チェックして拡大ボリュームをまたはちょうどより多くのスペースを使用して新しいインスタンスを起動するにしてdf -hシェル)ホストが十分なディスク領域があることを確認し、entrypoint.shのためのあなたのイメージを構築するとき、それはchmod +x実行可能であり、またあることを確認してくださいコンテナが実行されているユーザーが読むことができます。

まず、ローカルでコンテナをテストしてください。 2番目のエラーは開発中に即座に捕捉されていたはずです。

+0

非常に多くのタスクを開始し停止したため十分なスペースがないと思います。 –

+0

タスクはスペースを消費しません。画像は一回しかダウンロードされませんでした。 –

+0

しかし、タスク定義のリビジョンの自動化を試みる前にうまくいきました。 –

0

実行中のタスクが多すぎてスペースを消費した場合は、ホストにシェルインして次の操作を行う必要があります。それが実行されているECSエージェントコンテナ興奮しているすべての停止のコンテナになり

docker rm $(docker ps -aq) 
-1

ドゥドッキングウィンドウのps -a

を削除しますように、これらはまた、ディスクスペースを消費しdocker rm-fを使用しないでください。

(awkの「{$ 1印刷}」| | grepを終了しましたドッカPS -a)し、また、これらは、容器よりもDiskStationのサイズを取り、古い画像や未使用のイメージを削除それらzoombieに

ドッキングウィンドウは、rm $を削除するには、コマンドの下に使用します

ドッカーrmi -fイメージ名

関連する問題